חישוב עלויות וחיסכון ב-TypeScript

ניתן ליצור חישובים משלכם באמצעות TypeScript. הקוד שבתחתית הדף עוזר לכם לקבוע אם משתלם יותר להתקין לוחות סולאריים או להמשיך לשלם את חשבון החשמל כמו שהוא בטווח הארוך.

כאן יש פירוט ברמה גבוהה של האופן שבו הקוד קובע את העלויות של לוחות סולאריים.

חלק 1: צורכי המערכת וההגדרה

קודם כול, מגדירים את החשבונות הנוכחיים ואת השימוש בחשמל:

  • מהי צריכת החשמל שלך בכל חודש? (monthlyKwhEnergyConsumption)
  • כמה עולה החשמל הזה? (energyCostPerKwh)

בשלב הבא, מזינים את התוכניות של מערכת השמש:

  • כמה לוחות? (panelsCount)
  • מה עוצמת הלוחות? (panelCapacityWatts)
  • כמה עולה התקנה? (installationCostPerWatt)
  • יש הנחות במערכת? (solarIncentives)

חלק 2: חישובים

הקוד מחשב את הערך הבא, על סמך הערכים שהוזנו:

  • yearlyProductionAcKwh: סך כל החשמל השנתי שהלוחות הסולאריים יכולים לייצר.
  • totalCostWithSolar: עלות החשמל לאורך שנים רבות עם לוחות סולאריים.
  • totalCostWithoutSolar: עלות החשמל לאורך שנים רבות בלי לוחות סולאריים.

חלק 3: תוצאות

הקוד כולל גם את הפרטים הבאים:

  • savings: ההפרש בין העלות עם לוחות סולאריים וללא לוחות סולאריים.
  • breakEvenYear: כמה שנים עד שהעלות של לוחות סולאריים תהיה שווה לחיסכון בחשמל.

קוד לדוגמה

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