חישוב עלויות וחיסכון ב-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`);