Advertisement
x94fujo6

實際發電能力

Mar 4th, 2022 (edited)
501
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. https://greasyfork.org/zh-TW/scripts/440956
  3. userscript完成
  4. 此文件不再更新
  5.  
  6. 複製全部
  7. 到台電網頁 https://www.taipower.com.tw/tc/page.aspx?mid=206
  8. 按F12打開console/控制台
  9. 貼上按ENTER 執行
  10. 如備註符合limit清單中描述,部分故障/測試運轉...等: 僅計入當下發電能力 而不是最大容量
  11. 容量_總計_綠能僅實際發電 = 非綠能最大容量 + 綠能當下發電
  12.  
  13. 03/05: 計入抽蓄負載,抽蓄[負載]扣除非綠能發電。 但抽蓄[發電]計算為綠能。
  14. */
  15. (async function () {
  16.     let url = "https://www.taipower.com.tw/d006/loadGraph/loadGraph/data/genary.json",
  17.         raw = await fetch(url),
  18.         parseRaw = (arr) => {
  19.             let [type, group, name, cap, gen, gen_percent, note] = arr;
  20.             type = type.match(/b>(.*)<\/b/)[1].trim();
  21.             cap = parseFloat(cap);
  22.             gen = parseFloat(gen);
  23.             note = note.trim();
  24.             if (isNaN(cap)) cap = 0;
  25.             if (isNaN(gen)) gen = 0;
  26.             return { type, name, cap, gen, note };
  27.         },
  28.         not_run = [
  29.             "歲修",
  30.             "故障",
  31.             "環保停機檢修",
  32.             "檢修",
  33.             "機組安檢",
  34.             "測試停機",
  35.         ],
  36.         limit = [
  37.             "水文限制",
  38.             "燃料限制",
  39.             "環保限制",
  40.             "空污減載",
  41.             "測試運轉",
  42.             "運轉限制",
  43.             "EOH限制",
  44.             "合約限制",
  45.             "電源線限制",
  46.             "輔機檢修",
  47.             "外溫高限制",
  48.             "歲修逾排程",
  49.  
  50.             "部分歲修",
  51.             "部分檢修",
  52.             "部分故障",
  53.  
  54.             "友善降載減排",
  55.         ],
  56.         green = [
  57.             "水力(Hydro)",
  58.             "風力(Wind)",
  59.             "太陽能(Solar)",
  60.             "抽蓄發電(Pumping Gen)",
  61.             "其它再生能源(Other Renewable Energy)",
  62.         ],
  63.         data = [],
  64.         p = [],
  65.         sum_max_cap = 0,
  66.         sum_max_actual = 0,
  67.         sum_green_cap = 0,
  68.         sum_no_green_cap = 0,
  69.         sum_green_gen = 0
  70.         ;
  71.     raw = await raw.json();
  72.     raw = raw.aaData;
  73.     raw.forEach(arr => {
  74.         let pp = parseRaw(arr),
  75.             { name, cap, gen } = pp;
  76.         if (name != "小計" && (cap || gen)) {
  77.             data.push(pp);
  78.         }
  79.     });
  80.     console.log(data);
  81.     data.forEach(pp => {
  82.         p.push((async () => {
  83.             if (!not_run.some(t => t == pp.note)) {
  84.                 if (limit.some(t => t == pp.note) || pp.type == "抽蓄負載(Pumping Load)") {
  85.                     if (green.some(t => t == pp.type)) {
  86.                         sum_green_cap += pp.gen;
  87.                         sum_green_gen += pp.gen;
  88.                     } else {
  89.                         sum_no_green_cap += pp.gen;
  90.                     }
  91.                 } else {
  92.                     if (green.some(t => t == pp.type)) {
  93.                         sum_green_cap += pp.cap;
  94.                         sum_green_gen += pp.gen;
  95.                     } else {
  96.                         sum_no_green_cap += pp.cap;
  97.                     }
  98.                 }
  99.             }
  100.         })());
  101.     });
  102.     await Promise.all(p);
  103.     sum_max_cap = sum_no_green_cap + sum_green_cap;
  104.     sum_max_actual = sum_no_green_cap + sum_green_gen;
  105.     [
  106.         sum_max_cap,
  107.         sum_green_cap,
  108.         sum_no_green_cap,
  109.         sum_green_gen,
  110.         sum_max_actual,
  111.     ] = [
  112.         sum_max_cap,
  113.         sum_green_cap,
  114.         sum_no_green_cap,
  115.         sum_green_gen,
  116.         sum_max_actual,
  117.     ].map(num => num = Math.floor(num));
  118.     sum_green_gen = `${sum_green_gen} (${Math.floor(sum_green_gen / sum_green_cap * 10000) / 100}%)`;
  119.     console.log({
  120.         "容量_總計": sum_max_cap,
  121.         "容量_總計_綠能僅實際發電": sum_max_actual,
  122.         "非綠能_容量": sum_no_green_cap,
  123.         "綠能_容量": sum_green_cap,
  124.         "綠能_實際發電": sum_green_gen,
  125.     });
  126. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement