حساب التكاليف والتوفيرات في 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`);