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