Tính toán chi phí và tiết kiệm trong TypeScript

Nhà phát triển ở Khu vực kinh tế Châu Âu (EEA)

Bạn có thể tự tạo các phép tính bằng TypeScript. Mã ở cuối trang này giúp bạn xác định xem về lâu dài, việc lắp đặt tấm năng lượng mặt trời có rẻ hơn hay không, hoặc bạn có nên tiếp tục thanh toán hoá đơn tiền điện như hiện tại hay không.

Sau đây là thông tin tổng quan về cách mã xác định chi phí tấm năng lượng mặt trời.

Phần 1: Yêu cầu hệ thống và thiết lập

Trước tiên, hãy xác định mức sử dụng điện và hoá đơn tiền điện hiện tại:

  • Mỗi tháng bạn sử dụng bao nhiêu điện? (monthlyKwhEnergyConsumption)
  • Chi phí cho lượng điện đó là bao nhiêu? (energyCostPerKwh)

Tiếp theo, hãy nhập kế hoạch lắp đặt hệ thống năng lượng mặt trời:

  • Số lượng tấm pin? (panelsCount)
  • Công suất của các tấm pin? (panelCapacityWatts)
  • Chi phí lắp đặt? (installationCostPerWatt)
  • Có chiết khấu cho hệ thống không? (solarIncentives)

Phần 2: Phép tính

Dựa trên các giá trị đã nhập, mã sẽ tính toán:

  • yearlyProductionAcKwh: Tổng lượng điện hàng năm mà các tấm pin năng lượng mặt trời có thể tạo ra.
  • totalCostWithSolar: Chi phí điện trong nhiều năm khi có tấm pin năng lượng mặt trời.
  • totalCostWithoutSolar: Chi phí điện trong nhiều năm khi không có tấm pin năng lượng mặt trời.

Phần 3: Kết quả

Mã cũng cho bạn biết những thông tin sau:

  • savings: Mức chênh lệch giữa chi phí khi có và không có tấm pin năng lượng mặt trời.
  • breakEvenYear: Số năm cho đến khi chi phí tấm pin năng lượng mặt trời bằng với mức tiết kiệm điện.

Mã mẫu

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