EOS 能源优化电价接口全解6种数据源背后的自适应预测机制【免费下载链接】EOSThis repository features an Energy Optimization System (EOS) that optimizes energy distribution, usage for batteries, heat pumps household devices. It includes predictive models for electricity prices (planned), load forecasting dynamic optimization to maximize energy efficiency minimize costs. Founder Dr. Andreas Schmitz (YouTube akkudoktor)项目地址: https://gitcode.com/GitHub_Trending/eos5/EOS能源优化系统做的每个决定——现在充电还是再等两小时、热泵这个小时开多大——都依赖同一个输入未来 48 小时的可信电价。可现实里的电价数据很乱Akkudoktor 给的是欧分/kWhEnergy-Charts 给的是 EUR/MWh更新节奏更是各不相同。EOS 开源能源优化系统把这一坨脏活收敛进了一个模块elecprice电价预测。今天拆解它怎么把 6 种数据源喂进同一套优化引擎。它为什么值得单独设计电价不是简单的拉个 API。它有三个绕不开的麻烦单位不统一各 API 从 €cent/kWh 到 EUR/MWh 都有、历史与预测混杂API 返回的数据一部分是已发生的一部分是还没发生的、费用叠加市场电价只是裸价实际账单还要加网络费、增值税且费率可能随时改。EOS 的解法是把取数和算价分层每个数据源只实现_request_forecast和_update_data负责把数据拉回来并换算成统一的amount/Wh每瓦时多少钱而预测策略、费用叠加、数据持久化全部下沉到共享基类 priceabc.py 的PricePredictionProviderBase。新增一个电价源你只写怎么取数、怎么换算单位其余几十行逻辑直接复用。另一个关键决策是raw / gross 双轨制。每条记录存两个字段见 elecpriceabc.pyelecprice_marketprice_raw_wh不含费的裸市场价预测模型只吃它elecprice_marketprice_wh叠加费用后的到电价优化器用它为什么要分开因为 ETS 季节模型要学的是批发市场价的真实波动形态如果拿含费数据训练费率变动会被误判成价格趋势。费用是后叠加的每次更新只对本周期触碰的时间窗重算 gross_store_gross_series多年历史不必全量刷。30秒跑通一行配置拉出价格序列EOS 是单例 配置驱动跑起来只要两行from akkudoktoreos.core.coreabc import get_prediction prediction get_prediction() prediction.update_data() # 更新 config.elecprice.provider 指定的源前提是配置文件里声明了用哪个源完整字段见 docs/_generated/configelecprice.md{ prediction: { hours: 48, historic_hours: 336 }, elecprice: { provider: ElecPriceEnergyCharts, energycharts: { bidding_zone: DE-LU } } }然后从单例记录里读结果elecprice_marketprice_kwh是现成的 €/kWhfrom akkudoktoreos.prediction import elecprice_akkudoktor for rec in elecprice_akkudoktor.records[:3]: print(rec.date_time, f{rec.elecprice_marketprice_kwh:.4f} €/kWh)内部怎么转的裸价打底预测补尾费用后叠每个 provider 的更新周期是同一条流水线费用叠加的公式在ElecPriceProvider._compute_gross里先加固定费率再乘百分比比如增值税# amount/Wh 粒度逐时间窗对齐 gross (raw elecfee_consumption_amt_wh) * (100 elecfee_consumption_percent_amt) / 100各数据源的差异只剩取数这一层选源时对照这张表Provider数据特点单位换算更新节奏ElecPriceAkkudoktorapi.akkudoktor.net 市场电价eurocent/kWh ÷ 100 ÷ 1000每小时ElecPriceEnergyChartsEnergy-Charts API按bidding_zone选区DE-LU 等 16 区EUR/MWh ÷ 1,000,000每天 14:00 发布次日价ElecPriceFixed本地 time window 配置无网络€/kWh ÷ 1000按需生成ElecPriceImportimport_json/ 文件离线注入直接给 amount/Wh按需实际 provider 共 6 个另有ElecPriceTibber、ElecPriceSMARD全部走同一条流水线。预测策略不是写死的三档自动降级_predictpriceabc.py 第 141 行的分支逻辑比想象中保守weekly_periods 168 * slots_per_hour # 周季节周期 daily_periods 24 * slots_per_hour # 日季节周期 if len(history) 2 * weekly_periods: return self._predict_ets(history, weekly_periods, hours) elif len(history) 2 * daily_periods: return self._predict_ets(history, daily_periods, hours) else: return self._predict_median(history, hours) # 打 warning三个细节值得注意为什么是≥2×周期Holt-Winters 的季节分量至少需要两个完整周期才能可信地分离趋势和季节_predict_ets里对此有硬性校验。2σ 截断先行进模型前先_cap_outliers把超出均值 ±2σ 的点裁掉。市场电价经常出现单点负价尖峰或数据毛刺不裁的话季节分解会被一个点带偏。slots_per_hour自适应_resolution_seconds用时间戳差值的中位数推断实际采样粒度要求整除 360015 分钟数据下一周就是 168×4 个 slot。所以这套逻辑对亚小时级数据同样成立。Energy-Charts 源还多了一层省流量与容灾设计elecpriceenergycharts.py本地历史够长且发布覆盖完整时直接跳过拉取网络请求带 3 次重试 递增退避彻底失败也不抛崩——保留已有历史用 ETS 把缺口外推过去下一周期再自愈。离线场景不联网也能端到端跑测试和演示最常用的组合是ElecPriceImportElecFeeFixed整段配置如下格式与tests/testdata/import_input_1.json一致{ elecprice: { provider: ElecPriceImport, elecpriceimport: { import_json: {\elecprice_marketprice_wh\: [0.0003384, 0.0003318, 0.0003284]} } }, elecfee: { provider: ElecFeeFixed, elecfeefixed: { consumption_percent_amt: { windows: [{start_time: 00:00, duration: 24 hours, value: 19.0}] } } } }update_data()跑完后记录里的elecprice_marketprice_wh就是含 19% 税的到电价。这个路径的价值在于优化器消费的是同一套 gross 序列你完全不需要为离线/在线两套数据流写适配代码。避坑清单价格差三个数量级0.34 vs 340→ 内部一律存 amount/Whelecprice_marketprice_kwh是 ×1000 的便捷属性 → import 时字段名必须用elecprice_marketprice_wh值换算成 €/Wh日志刷Using median fallback to predict prices with only N values→ 历史不足 2×2448 个点预测退化成中位数常值 → 把prediction.historic_hours提到 3365 周以上才能吃到周季节 ETSEnergy-Charts 价格没更新→ 该源每天 14:00 才发布次日价格_has_complete_published_horizon按 14:00 前后分别校验覆盖天数 → 属预期行为不是故障改了费率历史 gross 没变→_store_gross_series只重算本周期触碰的窗口不会追溯多年历史 → 需要回溯时触发一次 forced refetch 或显式重算拉取报schema change→ API 响应没过 pydantic 校验异常信息里逐字段列了Field - msg - type→ 按字段名对新版 API 升级 EOS别急着改解析逻辑EOS 把电价从一堆各说各话的 API收敛成了一条 raw 打底、ETS 补尾、费用后叠的流水线6 种数据源换起来只是换个取数适配器优化器拿到的永远是同一条干净、含费、按时间窗对齐的序列——这就是预测层最值得抄的设计。【免费下载链接】EOSThis repository features an Energy Optimization System (EOS) that optimizes energy distribution, usage for batteries, heat pumps household devices. It includes predictive models for electricity prices (planned), load forecasting dynamic optimization to maximize energy efficiency minimize costs. Founder Dr. Andreas Schmitz (YouTube akkudoktor)项目地址: https://gitcode.com/GitHub_Trending/eos5/EOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?