#battery #control #settings #soc #dynamically #load #inverter

bin+lib socit

动态控制逆变器 SoC 设置

4 个版本

0.2.1 2023 年 12 月 25 日
0.2.0 2023 年 10 月 22 日
0.1.1 2023 年 6 月 27 日
0.1.0 2023 年 6 月 27 日

#4 in #soc

每月 22 次下载

GPL-3.0-or-later

50KB
987

充电状态控制

此软件包积极控制最小充电状态(电池水平)以适应减载并减少电池的不必要循环。它集成了EskomSePush API,以获取南非减载的实时信息。

目前仅支持 Sunsynk 单相逆变器(Deye 逆变器也支持,因为它们在底层是同一东西)。

编译

  1. 安装 Rust,例如使用这些说明
  2. 运行 cargo install socit 来安装二进制文件。或者,检出仓库并运行 cargo build --release。这将编译二进制文件到 target/release/socit

如果您想交叉编译

  1. 安装并设置cross,例如使用这些说明
  2. 运行 cross build --release --target=armv7-unknown-linux-gnueabihf(替换为目标架构)。
  3. target/<arch>/release/target 中找到二进制文件。

我发现,在 Raspberry Pi(1B 型号)上运行 arm-unknown-linux-gnueabi 构建会产生错误的结果。使用 arm-unknown-linux-gnueabihf(注意最后两个字符,表示硬浮点)可以给出正确的结果,并且速度也更快。

配置

配置存储在 TOML 文件中。仓库中有一个示例,您可以复制并编辑它以提供您的配置。它包含了关于可用设置的详细说明。

执行

运行二进制文件(socit)并将配置文件作为唯一的命令行参数传递。它使用 env_logger crate 进行日志记录,因此您可以通过(例如)设置环境变量 RUST_LOG=info 来启用日志记录。

时间同步

您应该确保运行socit的系统其时区设置正确,并且时钟与NTP等同步。Socit会定期更新逆变器的时钟以匹配主机时钟(因此,即使没有官方的USB闪存盘,逆变器时钟也能保持同步)。

算法

周期性地(撰写本文时,每分钟一次)预测在未来24小时内,假设没有电网输入,电荷状态可能会如何变化。在限电期间,它使用悲观建模(max_discharge_power)并且假设没有太阳能光伏,而在其他时间内,它使用乐观假设(min_discharge_power)并假设没有云来估计太阳能光伏。然后,它确定系统现在应具有的最小电荷状态,以避免在未来(如果可能)低于minimum_soc

计算了三个SoC级别。当高于target_soc_high时,不需要电网电力。在target_soc_lowtarget_soc_high之间,电网电力用于负载,但电池不改变,而当低于target_soc_low时,电池也会充电。最后,值alarm_soc没有内部影响,但在数据库中存储,可由外部警报工具使用:如果实际SoC低于alarm_soc,则存在低于minimum_soc的风险。

变更日志

0.2.1

  • 将鲁棒的Modbus访问重构为单独的crate(modbus-robust)。

0.2.0

  • 添加alarm_soc
  • 使启动鲁棒,如果Modbus连接无法立即建立,socit将继续运行并重复尝试。

0.1.1

修复示例配置文档,指出如果需要,将重新启动mbusd连接。

0.1.0

首次发布。

许可证

此程序是自由软件:您可以在自由软件基金会发布的GNU通用公共许可证的条款和条件下重新分配和/或修改它,许可证版本为3,或者(根据您的选择)许可证的任何后续版本。

此程序分发时,希望它是有用的,但没有提供任何保证;甚至没有对适销性或特定目的适用性的暗示保证。有关详细信息,请参阅GNU通用公共许可证。

您应该已收到GNU通用公共许可证副本。如果没有,请参阅https://gnu.ac.cn/licenses/

依赖关系

~17–35MB
~518K SLoC