private IEnumerable <EventViewModel> EnumerateEvents() { if (Span is null || Query is null) { yield break; } var eventData = _db.DsSceneEventDataSet.Where(x => x.Key >= Span.Begin.Date && x.Key <= Span.End.Date).ToList(); var events = eventData.SelectMany(x => x.EventStream).Where(x => x.TimestampUtc >= Span.Begin.ToUniversalTime() && x.TimestampUtc <= Span.End.ToUniversalTime()).ToList(); List <DssEvent> filtered; try { var query = JsonSerializer.Deserialize <EventQuery>(Query); var zonesFromMeters = query?.MeterIds?.Select(x => x.Contains('_') ? x.Split('_').LastOrDefault() : x) ?.SelectMany(circuit => _dsStructure.GetCircuitZones(circuit)).ToList() ?? new List <Zone>(); var zones = (query?.ZoneIds?.Select(x => (Zone)x)?.ToList() ?? new List <Zone>()).Union(zonesFromMeters).Distinct().ToList(); filtered = events .Where(x => query?.EventNames?.Contains(x.SystemEvent.Name, StringComparer.InvariantCultureIgnoreCase) ?? true) .Where(x => zones.Contains(x.Properties.ZoneID)) .Where(x => query?.GroupIds?.Contains(x.Properties.GroupID) ?? true) .Where(x => query?.SceneIds?.Contains(x.Properties.SceneID) ?? true) .ToList(); } catch (Exception ex) { _logger.LogWarning($"Annotation Query error, using unfiltered event list. Message: {ex.Message}"); filtered = events; } foreach (var dssEvent in filtered) { yield return(new EventViewModel( time: dssEvent.TimestampUtc, title: (string?)_localizer["event: {0}", dssEvent.SystemEvent.Name] ?? string.Empty, text: (string?)_localizer["{0}, zone {1}, group {2}, scene {3}", dssEvent.SystemEvent.Name, (int)dssEvent.Properties.ZoneID, (int)dssEvent.Properties.GroupID, (int)dssEvent.Properties.SceneID] ?? string.Empty, tags: new[] { dssEvent.SystemEvent.Name, _dsStructure.GetZoneName(dssEvent.Properties.ZoneID), dssEvent.Properties.GroupID.ToString("d", CultureInfo.CurrentUICulture), dssEvent.Properties.SceneID.ToString("d", CultureInfo.CurrentUICulture) } )); } }
public override GraphViewModel Graph(int index) { int column = index % _columns.Count; return(column switch { 0 => DeferredLoadGraph <TimeSeries <double>, double>(index, k => Localized("Temperature {0}", _dsStructure?.GetZoneName(k) ?? k.ToString()), k => Localized("temperature_zone_{0}", (int)k), "#.# °C"), 1 => DeferredLoadGraph <TimeSeries <double>, double>(index, k => Localized("Humidity {0}", _dsStructure?.GetZoneName(k) ?? k.ToString()), k => Localized("humidity_zone_{0}", (int)k), "#.0 '%'"), _ => new GraphViewModel(), });
public override GraphViewModel Graph(int index) { int column = index % _columns.Count; return(column switch { 0 => DeferredLoadGraph <TimeSeries <double>, double>(index, k => $"Temperatur {_dsStructure?.GetZoneName(k) ?? k.ToString()}", k => $"temperatur_zone_{(int)k}", "#.# °C"), 1 => DeferredLoadGraph <TimeSeries <double>, double>(index, k => $"Luftfeuchtigkeit {_dsStructure?.GetZoneName(k) ?? k.ToString()}", k => $"luftfeuchtigkeit_zone_{(int)k}", "#.0 '%'"), _ => new GraphViewModel(), });