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