protected override void RunActualProcess()
        {
            SqlConnection.RecreateTable <HouseHeating>(Stage.Houses, Constants.PresentSlice);
            var dbHouses  = SqlConnection.GetDatabaseConnection(Stage.Houses, Constants.PresentSlice).Database;
            var dbComplex = SqlConnection.GetDatabaseConnection(Stage.Complexes, Constants.PresentSlice).Database;

            var buildingcomplexes       = dbComplex.Fetch <BuildingComplex>();
            var dbRaw                   = SqlConnection.GetDatabaseConnection(Stage.Raw, Constants.PresentSlice).Database;
            var energieBedarfsDatenBern = dbRaw.Fetch <EnergiebedarfsdatenBern>();
            var houses                  = dbHouses.Fetch <House>();
            var potentialHeatingSystems = dbHouses.Fetch <PotentialHeatingSystemEntry>();

            dbHouses.BeginTransaction();
            foreach (var h in houses)
            {
                var c  = buildingcomplexes.First(x => x.ComplexID == h.ComplexID);
                var hs = potentialHeatingSystems.Where(x => x.HouseGuid == h.HouseGuid).ToList();
                var hh = new HouseHeating {
                    LocalnetFernwärmeEnergyUse = hs.Sum(x => x.YearlyFernwärmeDemand),
                    LocalnetGasEnergyUse       = hs.Sum(x => x.YearlyGasDemand),
                    HouseGuid = h.HouseGuid,
                    LocalnetHeatingSystemEntryCount = hs.Count
                };
                //collect ebbe daten
                foreach (var eGid in c.EGids)
                {
                    var ebdbs = energieBedarfsDatenBern.Where(x => x.egid == eGid).ToList();
                    if (ebdbs.Count > 1)
                    {
                        throw new Exception("too many ebdb");
                    }

                    if (ebdbs.Count == 1)
                    {
                        var eb = ebdbs[0];
                        hh.KantonHeatingMethods.Add(GetHeatingMethodString((int)eb.upd_genhz));
                        hh.KantonTotalEnergyDemand      += eb.calc_ehzww;
                        hh.KantonHeizungEnergyDemand    += eb.calc_ehz;
                        hh.KantonWarmwasserEnergyDemand += eb.calc_eww;
                        hh.KantonDhwMethods.Add(GetHeatingMethodString(eb.upd_genww));
                    }
                }

                hh.LocalnetCombinedEnergyDemand = hh.LocalnetFernwärmeEnergyUse + hh.LocalnetGasEnergyUse;
                //hh.LocalnetAdjustedHeatingDemand =(hh.LocalnetFernwärmeEnergyUse / 0.95) + (hh.LocalnetGasEnergyUse / 0.85);
                hh.LocalnetHeatingEnergyDensity = hh.LocalnetAdjustedHeatingDemand / h.EnergieBezugsFläche;
                if (hh.LocalnetHeatingEnergyDensity > 500)
                {
                    hh.LocalnetHeatingEnergyDensity       = 250;
                    hh.EnergyDensityIndustrialApplication = hh.LocalnetHeatingEnergyDensity - 250;
                }

                hh.KantonHeatingEnergyDensity = hh.KantonTotalEnergyDemand / h.EnergieBezugsFläche;
                if (Math.Abs(hh.LocalnetHeatingEnergyDensity) > 0.001)
                {
                    hh.HeatingEnergyDifference = hh.LocalnetHeatingEnergyDensity - hh.KantonHeatingEnergyDensity;
                    if (double.IsNaN(hh.HeatingEnergyDifference) || double.IsInfinity(hh.HeatingEnergyDifference))
                    {
                        hh.HeatingEnergyDifference = 0;
                    }
                }

                if (hh.LocalnetHeatingEnergyDensity > 0)
                {
                    hh.MergedHeatingEnergyDensity = hh.LocalnetHeatingEnergyDensity;
                }
                else
                {
                    hh.MergedHeatingEnergyDensity = hh.KantonHeatingEnergyDensity;
                }

                if (hh.MergedHeatingEnergyDensity < 0)
                {
                    throw new Exception("Negative heating intensity");
                }

                hh.MergedHeatingDemand = 0;
                if (hh.LocalnetCombinedEnergyDemand > 1)
                {
                    hh.MergedHeatingDemand = hh.LocalnetCombinedEnergyDemand;
                }
                else
                {
                    hh.MergedHeatingDemand = hh.KantonTotalEnergyDemand;
                }

                dbHouses.Save(h);
                dbHouses.Save(hh);
            }

            dbHouses.CompleteTransaction();
        }
Example #2
0
        private static void GetKantonHeatingSystem(HeatingSystemType kantonHeatingMethod,
                                                   [NotNull] HeatingSystemEntry hse,
                                                   [NotNull] HouseHeating houseHeatingData,
                                                   ref double totalHeatDemand)
        {
            switch (kantonHeatingMethod)
            {
            case HeatingSystemType.Electricity:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Electricity;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Electricity;
                // change this to consider the canton values and leave some electricty rest
                totalHeatDemand = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Heatpump:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Heatpump;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Heatpump;
                // change this to consider the canton values and leave some electricty rest
                totalHeatDemand = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.SolarThermal:
                hse.OriginalHeatingSystemType    = HeatingSystemType.SolarThermal;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Other;
                totalHeatDemand = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Gas:
                //can't be gas, since localnet says it is not gas
                hse.OriginalHeatingSystemType    = HeatingSystemType.Gas;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                totalHeatDemand = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Fernwärme:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Fernwärme;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                totalHeatDemand = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Öl:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Öl;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                //: change this to consider the canton values and leave some electricty rest
                totalHeatDemand = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Kohle:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Kohle;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Other;
                totalHeatDemand = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.None:
                hse.OriginalHeatingSystemType    = HeatingSystemType.None;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.None;
                if (houseHeatingData.KantonTotalEnergyDemand > 1)
                {
                    throw new Exception("No heating method but energy demand");
                }

                break;

            case HeatingSystemType.Other:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Other;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Other;
                totalHeatDemand = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Holz:
                hse.OriginalHeatingSystemType    = HeatingSystemType.Holz;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Other;
                totalHeatDemand = houseHeatingData.KantonTotalEnergyDemand;
                break;

            case HeatingSystemType.Unbekannt:
                break;

            case HeatingSystemType.GasheatingLocalnet:
                hse.OriginalHeatingSystemType    = HeatingSystemType.GasheatingLocalnet;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Gas;
                totalHeatDemand = houseHeatingData.LocalnetGasEnergyUse;
                break;

            case HeatingSystemType.FernwärmeLocalnet:
                hse.OriginalHeatingSystemType    = HeatingSystemType.FernwärmeLocalnet;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Fernwärme;
                totalHeatDemand = houseHeatingData.LocalnetFernwärmeEnergyUse;
                break;

            case HeatingSystemType.FeuerungsstättenOil:
                totalHeatDemand = houseHeatingData.KantonTotalEnergyDemand;
                hse.OriginalHeatingSystemType    = HeatingSystemType.FeuerungsstättenOil;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                break;

            case HeatingSystemType.FeuerungsstättenGas:
                totalHeatDemand = houseHeatingData.KantonTotalEnergyDemand;
                hse.OriginalHeatingSystemType    = HeatingSystemType.FeuerungsstättenGas;
                hse.SynthesizedHeatingSystemType = HeatingSystemType.Öl;
                break;

            default: throw new Exception("Unknown heating method: " + kantonHeatingMethod);
            }
        }
        protected override void RunActualProcess()
        {
            var dbHouses  = Services.SqlConnectionPreparer.GetDatabaseConnection(Stage.Houses, Constants.PresentSlice);
            var dbComplex = Services.SqlConnectionPreparer.GetDatabaseConnection(Stage.Complexes, Constants.PresentSlice);

            dbHouses.RecreateTable <HouseHeating>();
            var           buildingcomplexes       = dbComplex.Fetch <BuildingComplex>();
            var           dbRaw                   = Services.SqlConnectionPreparer.GetDatabaseConnection(Stage.Raw, Constants.PresentSlice);
            var           energieBedarfsDatenBern = dbRaw.Fetch <EnergiebedarfsdatenBern>();
            var           houses                  = dbHouses.Fetch <House>();
            var           potentialHeatingSystems = dbHouses.Fetch <PotentialHeatingSystemEntry>();
            RowCollection rc = new RowCollection("Heating", "Heizung");

            dbHouses.BeginTransaction();
            foreach (var h in houses)
            {
                RowBuilder rb = RowBuilder.Start("House", h.ComplexName);
                rc.Add(rb);
                var c            = buildingcomplexes.First(x => x.ComplexID == h.ComplexID);
                var hs           = potentialHeatingSystems.Where(x => x.HouseGuid == h.Guid).ToList();
                var houseHeating = new HouseHeating {
                    LocalnetFernwärmeEnergyUse = hs.Sum(x => x.YearlyFernwärmeDemand),
                    LocalnetGasEnergyUse       = hs.Sum(x => x.YearlyGasDemand),
                    HouseGuid = h.Guid,
                    LocalnetHeatingSystemEntryCount = hs.Count
                };
                rb.Add("Fernwärme", houseHeating.LocalnetFernwärmeEnergyUse).Add("LocalnetEntries", hs.Count);
                rb.Add("Standort", string.Join(",", hs.Select(x => x.Standort).Distinct()));
                rb.Add("Gas", houseHeating.LocalnetGasEnergyUse);
                rb.Add("EBF", h.EnergieBezugsFläche);
                rb.Add("Abrechnung", JsonConvert.SerializeObject(hs, Formatting.Indented));
                //collect ebbe daten
                foreach (var eGid in c.EGids)
                {
                    var ebdbs = energieBedarfsDatenBern.Where(x => x.egid == eGid).ToList();
                    if (ebdbs.Count > 1)
                    {
                        throw new Exception("too many ebdb");
                    }

                    if (ebdbs.Count == 1)
                    {
                        var eb = ebdbs[0];
                        houseHeating.KantonHeatingMethods.Add(GetHeatingMethodString((int)eb.upd_genhz));
                        houseHeating.KantonTotalEnergyDemand      += eb.calc_ehzww;
                        houseHeating.KantonHeizungEnergyDemand    += eb.calc_ehz;
                        houseHeating.KantonWarmwasserEnergyDemand += eb.calc_eww;
                        houseHeating.KantonDhwMethods.Add(GetHeatingMethodString(eb.upd_genww));
                    }
                }

                houseHeating.LocalnetCombinedEnergyDemand = houseHeating.LocalnetFernwärmeEnergyUse + houseHeating.LocalnetGasEnergyUse;
                houseHeating.LocalnetHeatingEnergyDensity = houseHeating.LocalnetAdjustedHeatingDemand / h.EnergieBezugsFläche;
                if (houseHeating.LocalnetHeatingEnergyDensity > 500)
                {
                    houseHeating.LocalnetHeatingEnergyDensity       = 250;
                    houseHeating.EnergyDensityIndustrialApplication = houseHeating.LocalnetHeatingEnergyDensity - 250;
                }

                houseHeating.KantonHeatingEnergyDensity = houseHeating.KantonTotalEnergyDemand / h.EnergieBezugsFläche;
                if (Math.Abs(houseHeating.LocalnetHeatingEnergyDensity) > 0.001)
                {
                    houseHeating.HeatingEnergyDifference = houseHeating.LocalnetHeatingEnergyDensity - houseHeating.KantonHeatingEnergyDensity;
                    if (double.IsNaN(houseHeating.HeatingEnergyDifference) || double.IsInfinity(houseHeating.HeatingEnergyDifference))
                    {
                        houseHeating.HeatingEnergyDifference = 0;
                    }
                }

                if (houseHeating.LocalnetHeatingEnergyDensity > 0)
                {
                    houseHeating.MergedHeatingEnergyDensity = houseHeating.LocalnetHeatingEnergyDensity;
                }
                else
                {
                    houseHeating.MergedHeatingEnergyDensity = houseHeating.KantonHeatingEnergyDensity;
                }

                if (houseHeating.MergedHeatingEnergyDensity < 0)
                {
                    throw new Exception("Negative heating intensity");
                }

                houseHeating.MergedHeatingDemand = 0;
                if (houseHeating.LocalnetCombinedEnergyDemand > 1)
                {
                    houseHeating.MergedHeatingDemand = houseHeating.LocalnetCombinedEnergyDemand;
                }
                else
                {
                    houseHeating.MergedHeatingDemand = houseHeating.KantonTotalEnergyDemand;
                }

                dbHouses.Save(h);
                dbHouses.Save(houseHeating);
            }

            dbHouses.CompleteTransaction();
            var fn = MakeAndRegisterFullFilename("heatingCalcsDump.xlsx", Constants.PresentSlice);

            XlsxDumper.WriteToXlsx(fn, rc);
        }