Beispiel #1
0
        public void DynamicSerieTests()
        {
            DummyLambda(a => a);
            Dummy(3);

            const int max = 100000;
            var start = new DateTime(1000, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            var rowsA = new List<ISingleDataRow<int>>();
            var rowsB = new List<ISingleDataRow<int>>();

            for (var i = 0; i < max; i++)
            {
                rowsA.Add(new SingleDataRow<int>(start + TimeSpan.FromMinutes(i), i));
                rowsB.Add(new SingleDataRow<int>(start + TimeSpan.FromMinutes(i), i*2));
            }

            var serieA = new QuerySerie<int>(rowsA, start, start + TimeSpan.FromMinutes(max)) {Name = "A", Key = "A"};
            var serieB = new QuerySerie<int>(rowsB, start, start + TimeSpan.FromMinutes(max)) {Name = "B", Key = "B"};
            var table = new QueryTable<int>();
            table.AddSerie(serieA);
            table.AddSerie(serieB);

            //var sw = Stopwatch.StartNew();
            //var result = table.Do(i => i.GroupByHours(1, t => t.Mean())).ZipToNew<int>("SumTable", t => t.A + t.B);
            //sw.Stop();

            var sw2 = Stopwatch.StartNew();
            var result2 = table.Transform(i => i.GroupByMinutes(1, t => t.First()))
                .ZipToNew("DiffTable", t => t.A - t.B);
            sw2.Stop();
        }
Beispiel #2
0
        public IQueryTable <T> GetTable <T>(string measurementRegex, string timeExpression) where T : struct
        {
            var result = new QueryTable <T>();

            foreach (var meas in MetadataInternal.MeasurementsWithAliases)
            {
                var match = Regex.Match(meas.Key, measurementRegex);
                if (match.Success)
                {
                    var serie = meas.Value.GetDataPoints <T>(timeExpression).Alias(meas.Key);

                    Group g = match.Groups["g"];

                    if (g.Success)
                    {
                        serie.GroupName = g.Value;
                    }


                    Group k = match.Groups["k"];

                    if (k.Success)
                    {
                        serie.Key = k.Value;
                    }

                    result.AddSerie(serie);
                }
            }
            return(result);
        }
Beispiel #3
0
        public static INullableQueryTable <float> Lueftungswerte(this IDb db, string time, string interval, int windowFactor)
        {
            var table = new QueryTable <float>();

            table.AddSerie(db.GetSerie <float>("Lueftung_Zulufttemperatur", time).Alias("Zuluft"));
            table.AddSerie(db.GetSerie <float>("Lueftung_Ablufttemperatur", time).Alias("Abluft"));
            table.AddSerie(db.GetSerie <float>("Lueftung_Aussenlufttemperatur", time).Alias("Aussenluft"));
            table.AddSerie(db.GetSerie <float>("Lueftung_Fortlufttemperatur", time).Alias("Fortluft"));
            table.AddSerie(db.GetSerie <float>("Lueftung_Fan_Level", time).Alias("FanLevel"));
            table.AddSerie(db.GetSerie <float>("HmWetterstationTemperature", time).Alias("AussenTemp"));
            table.AddSerie(db.GetSerie <float>("heizenAvgTemperatureOhneHobbyraum", time).Alias("InnenTemp"));

            return(table.Group(
                       g =>
                       g.ByTime.Expression(interval, "5m", windowFactor)
                       .ExpandTimeRange(TimeSpan.FromMinutes(windowFactor)).TimeStampIsMiddle()
                       .Aggregate(a => a.MeanExpWeighted()))
                   .Calc(t =>
            {
                t.SoleEntzugsleistung = AirPower(t.FanLevel, t.Aussenluft, t.AussenTemp);
                t.WirkungsgradKwlAbluft = (float)100.0 / (t.Abluft - t.Aussenluft) * (t.Abluft - t.Fortluft);
                t.WirkungsgradGesamt = (float)100.0 / (t.InnenTemp - t.AussenTemp) * (t.Zuluft - t.AussenTemp);
                t.WirkungsgradOhneLeitungsverlust = (float)100.0 / (t.Abluft - t.AussenTemp) * (t.Zuluft - t.AussenTemp);
                t.WirkungsgradKwlZuluft = (float)100.0 / (t.Abluft - t.Aussenluft) * (t.Zuluft - t.Aussenluft);
                t.GewinnDurchSole = (float)t.SoleEntzugsleistung * ((100.0f - t.WirkungsgradKwlAbluft) / 100.0);
                var arbeitsZahl = 4.5f;
                t.GewinnDurchSoleElektrisch = (float)t.GewinnDurchSole / arbeitsZahl;
                t.GewinnNettoDurchSoleElektrisch = (float)(t.GewinnDurchSole / arbeitsZahl) - 2f;
                t.VerlustLeitungen = (float)AirPower(t.FanLevel, t.InnenTemp, t.Abluft);
                t.VerlustHaus = AirPower(t.FanLevel, t.InnenTemp, t.Zuluft);
                t.GewinnKwl = AirPower(t.FanLevel, t.Zuluft, t.Aussenluft);
                t.VerlustKwlElektrisch = KwlElectricalPower(t.FanLevel);
                t.GewinnNettoElektrisch = (t.GewinnKwl + t.GewinnDurchSole) / arbeitsZahl - KwlElectricalPower(t.FanLevel) - 2;
            }).RemoveDbSeries());
        }
Beispiel #4
0
        public static INullableQueryTable<float> Lueftungswerte(this IDb db, string time, string interval, int windowFactor)
        {
            var table = new QueryTable<float>();
            table.AddSerie(db.GetSerie<float>("Lueftung_Zulufttemperatur", time).Alias("Zuluft"));
            table.AddSerie(db.GetSerie<float>("Lueftung_Ablufttemperatur", time).Alias("Abluft"));
            table.AddSerie(db.GetSerie<float>("Lueftung_Aussenlufttemperatur", time).Alias("Aussenluft"));
            table.AddSerie(db.GetSerie<float>("Lueftung_Fortlufttemperatur", time).Alias("Fortluft"));
            table.AddSerie(db.GetSerie<float>("Lueftung_Fan_Level", time).Alias("FanLevel"));
            table.AddSerie(db.GetSerie<float>("HmWetterstationTemperature", time).Alias("AussenTemp"));
            table.AddSerie(db.GetSerie<float>("heizenAvgTemperatureOhneHobbyraum", time).Alias("InnenTemp"));

            return table.Group(
                g =>
                    g.ByTime.Expression(interval, "5m", windowFactor)
                        .ExpandTimeRange(TimeSpan.FromMinutes(windowFactor)).TimeStampIsMiddle()
                        .Aggregate(a => a.MeanExpWeighted()))
                .Calc(t =>
                {
                    t.SoleEntzugsleistung = AirPower(t.FanLevel, t.Aussenluft, t.AussenTemp);
                    t.WirkungsgradKwlAbluft = (float) 100.0/(t.Abluft - t.Aussenluft)*(t.Abluft - t.Fortluft);
                    t.WirkungsgradGesamt = (float)100.0 / (t.InnenTemp - t.AussenTemp) * (t.Zuluft - t.AussenTemp);
                    t.WirkungsgradOhneLeitungsverlust = (float)100.0 / (t.Abluft - t.AussenTemp) * (t.Zuluft - t.AussenTemp);
                    t.WirkungsgradKwlZuluft = (float)100.0 / (t.Abluft - t.Aussenluft) * (t.Zuluft - t.Aussenluft);
                    t.GewinnDurchSole = (float)t.SoleEntzugsleistung * ((100.0f - t.WirkungsgradKwlAbluft) / 100.0);
                    var arbeitsZahl = 4.5f;
                    t.GewinnDurchSoleElektrisch = (float)t.GewinnDurchSole / arbeitsZahl;
                    t.GewinnNettoDurchSoleElektrisch = (float)(t.GewinnDurchSole / arbeitsZahl) - 2f;
                    t.VerlustLeitungen = (float)AirPower(t.FanLevel, t.InnenTemp, t.Abluft);
                    t.VerlustHaus = AirPower(t.FanLevel, t.InnenTemp, t.Zuluft);
                    t.GewinnKwl = AirPower(t.FanLevel, t.Zuluft, t.Aussenluft);
                    t.VerlustKwlElektrisch = KwlElectricalPower(t.FanLevel);
                    t.GewinnNettoElektrisch = (t.GewinnKwl + t.GewinnDurchSole) / arbeitsZahl - KwlElectricalPower(t.FanLevel) - 2;
                }).RemoveDbSeries();
        }
Beispiel #5
0
        public void DynamicSerieTests()
        {
            DummyLambda(a => a);
            Dummy(3);

            const int max   = 100000;
            var       start = new DateTime(1000, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            var       rowsA = new List <ISingleDataRow <int> >();
            var       rowsB = new List <ISingleDataRow <int> >();


            for (var i = 0; i < max; i++)
            {
                rowsA.Add(new SingleDataRow <int>(start + TimeSpan.FromMinutes(i), i));
                rowsB.Add(new SingleDataRow <int>(start + TimeSpan.FromMinutes(i), i * 2));
            }

            var serieA = new QuerySerie <int>(rowsA, start, start + TimeSpan.FromMinutes(max))
            {
                Name = "A", Key = "A"
            };
            var serieB = new QuerySerie <int>(rowsB, start, start + TimeSpan.FromMinutes(max))
            {
                Name = "B", Key = "B"
            };
            var table = new QueryTable <int>();

            table.AddSerie(serieA);
            table.AddSerie(serieB);

            //var sw = Stopwatch.StartNew();
            //var result = table.Do(i => i.GroupByHours(1, t => t.Mean())).ZipToNew<int>("SumTable", t => t.A + t.B);
            //sw.Stop();

            var sw2     = Stopwatch.StartNew();
            var result2 = table.Transform(i => i.GroupByMinutes(1, t => t.First()))
                          .ZipToNew("DiffTable", t => t.A - t.B);

            sw2.Stop();
        }
Beispiel #6
0
 public static INullableQueryTable<float> LueftungTemperaturen(this IDb db, string time, string interval,
     int windowFactor)
 {
     var table = new QueryTable<float>();
     table.AddSerie(db.GetSerie<float>("Lueftung_Zulufttemperatur", time).Alias("Zulufttemperatur"));
     table.AddSerie(db.GetSerie<float>("Lueftung_Ablufttemperatur", time).Alias("Ablufttemperatur"));
     table.AddSerie(db.GetSerie<float>("Lueftung_Aussenlufttemperatur", time).Alias("Aussenlufttemperatur"));
     table.AddSerie(db.GetSerie<float>("Lueftung_Fortlufttemperatur", time).Alias("Fortlufttemperatur"));
     table.AddSerie(db.GetSerie<float>("Lueftung_Fan_Level", time).Alias("Lüfterstufe"));
     table.AddSerie(db.GetSerie<float>("HmWetterstationTemperature", time).Alias("Aussentemperatur Wetterstation"));
     table.AddSerie(db.GetSerie<float>("heizenAvgTemperatureOhneHobbyraum", time).Alias("Innenraumtemperatur"));
     return table.Group(
         g =>
             g.ByTime.Expression(interval, "5m", windowFactor)
                 .ExpandTimeRange(TimeSpan.FromMinutes(windowFactor)).TimeStampIsMiddle()
                 .Aggregate(a => a.MeanExpWeighted()));
 }
Beispiel #7
0
        public static INullableQueryTable <float> LueftungTemperaturen(this IDb db, string time, string interval,
                                                                       int windowFactor)
        {
            var table = new QueryTable <float>();

            table.AddSerie(db.GetSerie <float>("Lueftung_Zulufttemperatur", time).Alias("Zulufttemperatur"));
            table.AddSerie(db.GetSerie <float>("Lueftung_Ablufttemperatur", time).Alias("Ablufttemperatur"));
            table.AddSerie(db.GetSerie <float>("Lueftung_Aussenlufttemperatur", time).Alias("Aussenlufttemperatur"));
            table.AddSerie(db.GetSerie <float>("Lueftung_Fortlufttemperatur", time).Alias("Fortlufttemperatur"));
            table.AddSerie(db.GetSerie <float>("Lueftung_Fan_Level", time).Alias("Lüfterstufe"));
            table.AddSerie(db.GetSerie <float>("HmWetterstationTemperature", time).Alias("Aussentemperatur Wetterstation"));
            table.AddSerie(db.GetSerie <float>("heizenAvgTemperatureOhneHobbyraum", time).Alias("Innenraumtemperatur"));
            return(table.Group(
                       g =>
                       g.ByTime.Expression(interval, "5m", windowFactor)
                       .ExpandTimeRange(TimeSpan.FromMinutes(windowFactor)).TimeStampIsMiddle()
                       .Aggregate(a => a.MeanExpWeighted())));
        }