提高太阳能电池储蓄

导航至

此博客最初发布于 www.bentasker.co.uk

此项目是使用先前版本的 InfluxDB 构建的。 InfluxDB 3.0 放弃了 Flux 和内置任务引擎。用户可以使用外部工具,例如基于 Python 的 Quix,在 InfluxDB 3.0 中创建任务。 上个月,我分析了我们太阳能装置的性能。我发现,虽然我们的太阳能电池正在产生每日储蓄,但它可能 永远无法节省足够的资金来抵消其购买成本

其中涉及许多因素,但较大的因素之一是电池并非总是充满电,我们的平均每日最大充电水平 为 72%。电池在晴天会充满电,但英国的天气就是这样,有很多天拖低了平均水平。

正如我当时指出的那样,太阳能并非电池充电的唯一来源:还可以选择从电网充电(理想情况下是在价格较低时)。

因此,在过去一个月里,我正是这样做的。

在这篇文章中,我将描述我是如何配置的,分析更改的影响,并谈谈我的电力供应商 (Octopus) 最近所做的一些更改。能源消耗监控是一个 时间序列 用例,因此我将收集的指标写入 InfluxDB。它是专门为时间序列设计的,这使我可以轻松地实时可视化数据以及查看历史数据。

配置

我的目的是构建自动化系统,该系统可以消耗定价信息并动态控制电池应在何时充电。关于 如何从 HomeAssistant 控制 Solis 逆变器,有很多信息。

但是,当我尝试设置此功能时,我遇到了一个根本问题:所有设置指南和工具都依赖于较旧的数据棒。

我的逆变器(Solis RHI-3.6K-48ES-EG)配备了第三代数据棒(型号 S3-WIFI-ST),与旧型号不同,它不会在本地公开 Modbus。因此,诸如 solismodpysolarman 无法使用 之类的工具。

实际上有一个使用 rs485 分离器使功能正常运行的指南,但我尚未尝试(事实上,我只是在起草这篇文章时再次检查上面的链接时才发现它)。

但是,Soliscloud 有一个界面,允许您手动设置逆变器上的寄存器。默认情况下未启用它,因此需要 请求访问权限。获得授权后,没有 API 访问权限(更新:现在有了),但它的确名副其实。

导航界面非常简单: Soliscloud 远程控制界面的顶级菜单的屏幕截图 自从我第一次开始使用该界面以来,Solis 似乎仍在努力改进它,因为一些东西已经移动/更改。

默认模式为 自用(基本上,它优先考虑家庭需求而不是出口收入)。在该菜单中,还有一些其他选项: Soliscloud 远程控制界面的自用菜单的屏幕截图。有多个按钮,包括“分时开关”和“充电和放电” 充电和放电 按钮打开一个侧面板,允许配置充电时间和速率。 Soliscloud 远程控制界面的自用菜单的屏幕截图 这里值得注意的是,在一定程度上,您输入什么作为充电速率(只要不太低)并不重要:电池管理系统 (BMS) 不允许电池以超过其容量的速度充电。尽管如此,为了以防万一,最好谨慎行事,以防情况发生变化。

但是,在此处所做的更改将绝对不会产生任何影响,直到启用计划。

在“自用”菜单上,有一个标记为 分时开关 的按钮。任何以 开关 结尾的东西本质上都是一个布尔值——您将其打开或关闭。在这种情况下,开关定义是否遵守“充电/放电”计划。

调整分时

在我之前的文章中,我建议的缓解措施之一是调整设置,以便仅在最有价值时(即在高峰时段)才从电池中提取能量。想法是,高峰期后剩余的任何能量都将结转到第二天的峰值,而不是在夜间逐渐流失。

我确实研究过这样做,但不幸的是,逆变器的设置并非完全如此。

  • 如果您将 放电电流 字段设置为 0 并指定时间范围,则电池在该时间段内不会放电(很好!)
  • 但是,它也会将其视为放电期,因此不会为电池充电(糟糕!)

因此,虽然从技术上讲,您可以设置电池仅在特定时间放电,但它可能首先没有任何电量可放电。

在为了使此功能正常工作而摆弄的过程中,我了解了有关 Solis 逆变器调度的几件事

  • 如果您设置充电期,电池将以该速率充电,从电网获取能量以补充面板提供的能量。
  • 如果您设置放电期,电池将以指定的速率持续放电,如果家庭需求不足以消耗能量,则将能量输出到电网(这让我感到惊讶,导致我在高峰时段开始前不久意外地将电池负载倾倒到电网)。
  • 自用 中,没有一种方法(除了设置放电期)告诉逆变器不要从面板为电池充电。
  • 如果您切换到 电网反馈优先,则计划的含义会发生变化。除非定义了充电期,否则电池不会从面板充电。

实际上,自用 模式意味着该工具实际上只允许您影响电池与电网的交互方式:它应该何时从电网充电,以及何时应该向电网放电?考虑到该模式旨在尝试确保消耗主要使用本地产生的能量,这实际上非常合乎逻辑,但它可能有点限制性。

例行计划

由于无法动态根据价格调整充电计划,我需要选择一个通常价格较低的时间范围。

当然,最明显的选择是在凌晨,所以我设置了一个合适的计划: 分时窗格的屏幕截图。我已将逆变器设置为在凌晨 2 点到 4 点之间为电池充电 第二天晚上,电池按预期充电。当然,除了我们在到达高峰期时充电早已消失(事实上,在我起床之前就消失了)。

我摆弄了一下设置,但最终发现没有办法配置事物以使充电保持到高峰期(至少,如果我们希望面板为其充电)。

有帮助的是,不仅早上价格较低:下午也有几个小时(太阳能发电场可能正在弥补不足)价格也较低: 章鱼定价图表的屏幕截图,下午比下午 4 点以后便宜得多 因此,我更新了配置,以便我们在中午 12 点到高峰时段开始前为电池充电: 电池计划的屏幕截图,它将在 12:00 到 15:45 之间充电 这带来了一个额外的好处:电池将在整个上午进行太阳能充电,因此我们将仅使用电网来补充任何必要的电量(当然,如果进口价格降至出口价值以下,我们将需要重新评估)。

对充电水平的影响

这种变化对平均充电水平的影响不如我预期的那么显着

from(bucket: "Systemstats/rp_720d")
|> range(start: 2023-08-14T00:00:00Z)
|> filter(fn: (r) => r["_measurement"] == "solar_inverter")
|> filter(fn: (r) => r["_field"] == "batteryPowerPerc")
|> keep(columns: ["_time", "_field", "_value"])
|> aggregateWindow(every: 1d, fn: max, createEmpty: false)
|> mean()
Screenshot of battery schedule, it'll charge between 1200 and 1545

但是,仔细观察后,这个平均值被少数几个特别阴天的日子拉低,在这些日子里,电池获得的唯一充电来自电网。

如果我们改为查看电池充电至至少 65% 的天数比例(即,足以让我们度过即使是更繁忙的高峰期)

from(bucket: "Systemstats/rp_720d")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "solar_inverter")
|> filter(fn: (r) => r["_field"] == "batteryPowerPerc")
|> keep(columns: ["_time", "_field", "_value"])
|> aggregateWindow(every: 1d, fn: max, createEmpty: false)
|> map(fn: (r) => ({r with 
       _field: if r._value > 65.0 then "full" else "partial",
       _value: 1
       }))
|> sum()

差异非常明显: 饼图的屏幕截图,显示在进行更改之前和之后,电池未能达到 65% 电量水平的天数。 在更改之前,几乎 31% 的日子没有导致电池达到 65% 的充电水平(哎,英国的天气……)。自从进行更改以来,该数字已降至仅 6%

如果我们使用 45% 的充电阈值,差异会更加明显:部分充电在更改前占 20%,在更改后占 1%

对储蓄的影响

下午充电计划的引入导致每日储蓄率发生了相当大的变化(更改是在红线处进行的): 每日电池储蓄的屏幕截图。更改后,每日储蓄往往更高,但负值更多 (如果您想知道那些早期的几英镑储蓄,它们在 此处 进行了说明,但不幸的是,它们是不可重复的)。

更改产生了两个结果

  • 实现储蓄时,往往高于以前。
  • 负储蓄的发生频率更高。

当我们存储在电池中的电力总财务价值(即,从电网进口的成本或损失的出口成本)高于放电时等效能量的进口价值时,就会发生负储蓄。

在涵盖的时间范围内,主要决定因素之一似乎是我们晚上是否使用烤箱:如果我们 使用空气炸锅(或燃气灶)烹饪,我们在高峰时段不会消耗足够的能量。然后,电池的电量在夜间价格较低时逐渐释放,从而导致负储蓄。

因此,就像我上次分析一样,存在一种不正当的激励措施,即晚上使用效率较低的电器来帮助提高数字。

当然,没有人真正从以这种方式改善这些数字中受益:不必要地使用额外的能量仍然是净损失。这是最终导致尝试 燃烧轮胎以提高燃烧煤炭以生成加密货币的效率 的那种思维方式的一个例子。 一个加密货币兄弟坐在煤炭和轮胎制成的火焰中,手里拿着比特币。使用 Bing 的 AI 图像创建器生成,这可能解释了为什么他有第三只手 完全疯狂。

无论如何,尽管有那些负储蓄的日子,但平均每日储蓄已增加到 £0.152(从 £0.125)。虽然这种变化只有几便士,但它仍然代表平均每日储蓄增加了 21%

按照这个速度,电池将在……是的,我们还是不要去想这个了。

如果我们能够消除负储蓄日(难道你不喜欢魔术棒吗?),那么平均储蓄将变为每天 0.29。这大约使盈亏平衡时间减半(但仍然是电池额定寿命的许多倍)。

获得免费电力

我们的能源 тариф 为 Octopus Agile,有时价格会非常低(甚至变为负数)。不幸的是,自从我更新充电计划以来,这种情况并没有真正发生。

但是,我们现在加入了新的 Octopus 计划:Power-Ups章鱼关于 Power-Ups 页面的屏幕截图,显示了当前处于活动状态的区域 通过 Power-Ups,我们偶尔会获得电力免费的时段,尽管 Agile 价格不是 0。该计划旨在向当地电网运营商表明,过剩的可再生能源可以被消耗,并阻止他们在预计出现盈余时关闭绿色发电。

由于电力是免费的,因此显然最好从电网而不是太阳能为电池充电,从而有助于提高当天的储蓄。

为了在我的统计数据中考虑这些因素,我创建了一个新字段——override_price——它允许我使用简单的 curl 覆盖报告的 Agile 单位成本。

curl \
-d 'octopus_pricing,tariff_direction=import,charge_type=usage-charge,payment_method=None,reason=misc/solar#6 override_price=0.0 1692365400000000000' \
"http://192.168.3.96:8086/write?db=Systemstats"`

这会将该 30 分钟时段的成本设置为 0.0p/kWh

以下查询允许我们查看何时出现 Power-Ups 以及它们涵盖了多少时间

SELECT
   count("override_price") * 30 as "minutes"  
FROM "Systemstats"."autogen"."octopus_pricing" 
WHERE $timeFilter 
GROUP BY time(1d) fill(null)
Screenshot of graph showing when powerups have occurred. There have been 4 since the scheme started on Aug 14

正如您可能期望的那样,Power-Ups 时段对电池储蓄的影响非常积极(相关日期用红点标记): 显示电池储蓄值的图表的屏幕截图,红点标记了 Power-Ups 存在的日子。每天的储蓄都非常好 到目前为止,许多因素都影响了储蓄性能,但主要因素是在太阳能和电网充电之间取得平衡。

电池可以充电的最大速率是有限的,因此不可能在 2 小时内将电池从空电充到满电。这意味着让电池在早上从太阳能充电非常重要,否则可能没有足够的电量来应对高峰期。

相反,将过多的太阳能放入电池也没有意义,因为这样我们就无法充分利用免费的电网电力。

更复杂的是,电池的最大充电速率受温度等因素的影响,因此在安排充电时不可避免地存在猜测成分。

我发现关键在于不要仅仅依赖 Soliscloud 计划,而是手动切换事物

  • 设置一个计划在 Power-Ups 期间从电网充电(到目前为止,这是 14:00 - 16:00)。
  • 早上,让电池从太阳能充电,直到达到约 47%(在某些日子里,我们在 10:30 就达到了这个目标)。
  • 关闭 分时开关,然后将逆变器切换到 电网反馈优先 模式(以便它开始输出而不是为电池充电)
  • 在 Power-Ups 开始之前,切换回 自用 并重新打开 分时,以便电池从电网充电。

当然,这种方法依赖于我在正确的时间有空来切换事物。但是,它也导致更高的出口量(以及因此而产生的收入)。 显示系统出口量的图表的屏幕截图。Power-Ups 日用红点标记,通常要高得多 实际上,每个出口的 kWh 的价值是其原本价值的两倍。

  • 与其存储 1 kWh,不如将其出口(出口收入使余额 +15p)。
  • 在 Power-Ups 期间,我们使用存储在电池中的免费电网电力来替换它(余额保持 +15p)。
  • 稍后我们在现行进口价格下对其进行放电和消耗(假设 30p/kWh,余额变为 +45p)。

Power-Ups 允许我们索取出口价值,避免机会成本损失(正如我 上次写道,这是低储蓄率的主要原因),并且仍然在高峰时段实现完整的 kWh 储蓄价值。

虽然没有电池就无法达到这种增益水平,但这并未完全体现在电池节省数据中——要了解这种方法的真正好处,我们需要查看整个系统的节省数据: 显示系统节省的图表截图。电力增强日用红点标记,通常远高于其他日子 通常来说,电力增强日子的表现优于其相邻的日子。 8 月 18 日是个例外:那天不仅天气糟糕,而且还是我第一次尝试配置逆变器以利用电力增强,我搞砸了一点。

同样值得注意的是,电力增强还带来了非太阳能的节省,这些节省并未在这些图表中体现出来:我们将部分负载转移到了电力增强时段,因此我们能够免费运行洗衣机等。

结果是我们的消费成本每天至少减少了 60 便士: 显示通过 Octopus 电力增强实现的节省的图表截图 就电网而言,它在供应较低时获得了额外的绿色能源供应(我们的输出),而无需降低绿色发电能力。

进一步改进

几天前,我对时间表做了一个额外的更改。

虽然远低于傍晚高峰,但每天早上都有一个定价高峰(与人们准备上班等时间重合)。 显示 Octopus 定价的图表截图,每天早上有一个小高峰,之后价格在下午再次下降 在早上那个时候,我们的太阳能板是活跃的,但远未达到最佳运行状态,因此似乎明智的做法是进行少量夜间充电,以帮助削减早高峰。 电池计划截图,现在配置为 12:00-15:45 和 03:15-05:45 充电 即使有节省,也可能最多只有几便士,但这仍然是电池每日价值的合理百分比提升。 在冬季,当我们的太阳能板在一天中稍晚时间开始发电时,这种情况可能会更加明显。

结果

电池盈亏平衡期仍然 遥遥无期。 但是,鉴于电池一旦购买就无法退货,电池可以产生的任何额外节省仍然是受欢迎的,尤其因为它有助于降低我们的能源账单。 如果我足够聪明,我可能可以找到一种方法来投资这些节省下来的钱,以便它们的增长可以进一步为实现盈亏平衡做出贡献。

由于我们的日常活动各不相同,因此为电池充电(无论是从电网还是太阳能)都带有一定的风险:电池释放节省能力在很大程度上取决于我们在高峰时段是否需要足够的能量。

这可以通过将电池放电限制在特定时段来缓解,但这对于这款逆变器来说目前还不可能实现(或者至少,并非没有重大的权衡)。

毫不奇怪,释放额外电池节省的最佳方法是更多地使用电池。 确保电池至少有足够的电量来应对高峰使用量,这有助于将节省额提高约 20%

Octopus 电力增强的引入也被证明是有益的,使系统能够获得相当数量的额外价值。 在冬季,由于我们无法输出接近相同数量的能源,因此收益很可能会减少。 但反过来,我们的电池可能更需要电网充电。

显然,我在这方面的工作尚未完成。

首先,我需要看看从削减早高峰中能获得什么好处(如果有的话)。

一旦我获得了关于这方面的有意义的统计数据,下一步很可能是在组合中添加一个 rs485 开关,以便我可以开始自动化。

有了自动化,我将能够更好地

  • 避免产生负节省:在那些我们通常不使用烤箱的日子里,自动化可以禁用(或者可能只是减少)计划的电网充电。
  • 确保阴天有合理的充电水平:天气预报可用于确定我们是否可能需要长时间的电网充电来应对高峰期。
  • 自动在自用和电网优先模式之间切换,从而可以更精细地控制电池的充电和放电时间。

我不认为我们会达到购买电池不会是一个财务错误的地步,但鉴于我们已经拥有了它,我认为仍然有一些额外的节省空间——特别是当系统的其余部分表现足够出色,可以相对快速地抵消电池的成本时。