Menghitung biaya dan penghematan di TypeScript

Anda dapat membuat perhitungan sendiri menggunakan TypeScript. Kode di bagian bawah halaman ini membantu Anda menentukan apakah memasang panel surya akan lebih murah dalam jangka panjang atau terus membayar tagihan listrik sebagaimana adanya.

Berikut adalah perincian tingkat tinggi tentang cara kode tersebut menentukan biaya panel surya.

Bagian 1: Kebutuhan dan penyiapan sistem

Pertama, tentukan penggunaan dan tagihan listrik Anda saat ini:

  • Berapa banyak listrik yang Anda gunakan setiap bulan? (monthlyKwhEnergyConsumption)
  • Berapa biaya listrik itu? (energyCostPerKwh)

Selanjutnya, masukkan rencana tata surya Anda:

  • Berapa banyak panel? (panelsCount)
  • Seberapa kuat panel tersebut? (panelCapacityWatts)
  • Berapa biaya pemasangannya? (installationCostPerWatt)
  • Ada diskon di sistem? (solarIncentives)

Bagian 2: Kalkulasi

Berdasarkan nilai yang dimasukkan, kode akan menghitung:

  • yearlyProductionAcKwh: Total listrik tahunan yang dapat dihasilkan oleh panel surya Anda.
  • totalCostWithSolar: Biaya listrik selama bertahun-tahun dengan panel surya.
  • totalCostWithoutSolar: Biaya listrik selama bertahun-tahun tanpa panel surya.

Bagian 3: Hasil

Kode tersebut juga memberi tahu Anda hal berikut:

  • savings: Perbedaan antara biaya dengan dan tanpa panel surya.
  • breakEvenYear: Berapa tahun hingga biaya panel surya sama dengan penghematan listrik.

Kode contoh

// 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`);