Beispiel #1
0
        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) }
                                 ));
            }
        }
Beispiel #2
0
        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(),
            });