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(); }
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); }