Oblicz koszty i oszczędności w TypeScript

Możesz tworzyć własne obliczenia za pomocą TypeScript. Kod na dole tej strony pomoże Ci określić, czy taniej jest zainstalować panele słoneczne czy dalej płacić za prąd według dotychczasowych stawek.

Oto ogólny opis sposobu, w jaki kod określa koszty paneli słonecznych.

Część 1. Wymagania systemowe i konfiguracja

Najpierw określ bieżące zużycie energii elektrycznej i rachunki:

  • Ile energii elektrycznej zużywasz co miesiąc? (monthlyKwhEnergyConsumption)
  • Ile kosztuje prąd? (energyCostPerKwh)

Następnie podaj plany dotyczące układu słonecznego:

  • Ile paneli? (panelsCount)
  • Jaka jest moc paneli? (panelCapacityWatts)
  • Ile kosztuje instalacja? (installationCostPerWatt)
  • Czy są jakieś rabaty na system? (solarIncentives)

Część 2. Obliczenia

Na podstawie podanych wartości kod oblicza:

  • yearlyProductionAcKwh: łączna roczna ilość energii elektrycznej, jaką mogą wygenerować panele słoneczne.
  • totalCostWithSolar: koszt energii elektrycznej w ciągu wielu lat z paneli słonecznych.
  • totalCostWithoutSolar: koszt energii elektrycznej przez wiele lat bez paneli słonecznych.

Część 3. Wyniki

Kod zawiera też te informacje:

  • savings: różnica między kosztami z panelami słonecznymi i bez nich.
  • breakEvenYear: ile lat musi upłynąć, aby koszt paneli słonecznych zrównał się z oszczędnościami na energii elektrycznej.

Przykładowy kod

// Solar configuration, from buildingInsights.solarPotential.solarPanelConfigs
let panelsCount = 20;
let yearlyEnergyDcKwh = 12000;

// Basic settings
let monthlyAverageEnergyBill: number = 300;
let energyCostPerKwh = 0.31;
let panelCapacityWatts = 400;
let solarIncentives: number = 7000;
let installationCostPerWatt: number = 4.0;
let installationLifeSpan: number = 20;

// Advanced settings
let dcToAcDerate = 0.85;
let efficiencyDepreciationFactor = 0.995;
let costIncreaseFactor = 1.022;
let discountRate = 1.04;

// Solar installation
let installationSizeKw: number = (panelsCount * panelCapacityWatts) / 1000;
let installationCostTotal: number = installationCostPerWatt * installationSizeKw * 1000;

// Energy consumption
let monthlyKwhEnergyConsumption: number = monthlyAverageEnergyBill / energyCostPerKwh;
let yearlyKwhEnergyConsumption: number = monthlyKwhEnergyConsumption * 12;

// Energy produced for installation life span
let initialAcKwhPerYear: number = yearlyEnergyDcKwh * dcToAcDerate;
let yearlyProductionAcKwh: number[] = [...Array(installationLifeSpan).keys()].map(
  (year) => initialAcKwhPerYear * efficiencyDepreciationFactor ** year,
);

// Cost with solar for installation life span
let yearlyUtilityBillEstimates: number[] = yearlyProductionAcKwh.map(
  (yearlyKwhEnergyProduced, year) => {
    const billEnergyKwh = yearlyKwhEnergyConsumption - yearlyKwhEnergyProduced;
    const billEstimate =
      (billEnergyKwh * energyCostPerKwh * costIncreaseFactor ** year) / discountRate ** year;
    return Math.max(billEstimate, 0); // bill cannot be negative
  },
);
let remainingLifetimeUtilityBill: number = yearlyUtilityBillEstimates.reduce((x, y) => x + y, 0);
let totalCostWithSolar: number =
  installationCostTotal + remainingLifetimeUtilityBill - solarIncentives;
console.log(`Cost with solar: $${totalCostWithSolar.toFixed(2)}`);

// Cost without solar for installation life span
let yearlyCostWithoutSolar: number[] = [...Array(installationLifeSpan).keys()].map(
  (year) => (monthlyAverageEnergyBill * 12 * costIncreaseFactor ** year) / discountRate ** year,
);
let totalCostWithoutSolar: number = yearlyCostWithoutSolar.reduce((x, y) => x + y, 0);
console.log(`Cost without solar: $${totalCostWithoutSolar.toFixed(2)}`);

// Savings with solar for installation life span
let savings: number = totalCostWithoutSolar - totalCostWithSolar;
console.log(`Savings: $${savings.toFixed(2)} in ${installationLifeSpan} years`);