3 个版本

0.2.5 2024年1月12日
0.2.3 2023年6月17日
0.2.1 2023年5月14日

#616 in 网络编程

MIT 许可证

54KB
1K SLoC

我为编写 Sermatec-Ess CLI 光储一体机协议做出的微小贡献

  • 在 SMT-5K-TL-LV 硬件上与 PCU 6.0.9 进行测试
  • 在 STM-10K-TL-TH 上进行测试(有人想测试吗?)

或许有一天

  • 配置命令?
  • 使用 egui 的漂亮 GUI?

编译

用于移除 libc 依赖(清理 ldd)

apt install musl musl-dev musl-tools
rustup target add x86_64-unknown-linux-musl
cargo build --target x86_64-unknown-linux-musl --release

CLI 示例

$ ./sermatec-ess
Usage: sermatec-ess [OPTIONS] [COMMAND]

Commands:
  get     Get a specific things
  list    Get listing of all things
  daemon  Daemon mode use sermatec-ess as a MQTT client
  help    Print this message or the help of the given subcommand(s)

Options:
  -i, --inverter <Inverter IPv4>  Sets Sermatec ESS Ipv4Addr [default: 10.10.100.254]
  -p, --port <Port number>        Sets Sermatec ESS Port number [default: 8899]
  -d, --debug...                  Turn debugging information on
  -h, --help                      Print help
$ ./sermatec-ess list  
--===~ Sermatec ESS CLI AND MQTT PROXY ~===--
Asking to Sermatec Inverter 10.10.100.254:8899
listing commands:

sermatec-ess get --el 0a : Battery information display
sermatec-ess get --el 0b : Control cabinet information display
sermatec-ess get --el 0c : Equipment running status
sermatec-ess get --el 0d : bmsMeter connection status
sermatec-ess get --el 1e : BMS alarm information display
sermatec-ess get --el 1f : System fault status display
sermatec-ess get --el 64 : Control command settings (*)
sermatec-ess get --el 66 : Operating mode setting (*)
sermatec-ess get --el 67 : Working parameter setting 2 (*)
sermatec-ess get --el 68 : Time Calibration Settings (*)
sermatec-ess get --el 69 : Grid battery type setting (*)
sermatec-ess get --el 6a : Operating mode setting 2 (*)
sermatec-ess get --el 70 : reset (*)
sermatec-ess get --el 71 : Set mandatory charging and discharging information (*)
sermatec-ess get --el 94 : Set WIFI password (*)
sermatec-ess get --el 95 : Set parameter query
sermatec-ess get --el 98 : System Information Query
sermatec-ess get --el 99 : total power data
sermatec-ess get --el 9a : Grid power data
sermatec-ess get --el 9b : Load power data
sermatec-ess get --el 9c : Grid battery power data
sermatec-ess get --el 9d : Set parameter information 2
sermatec-ess get --el 9e : Set router information (*)
sermatec-ess get --el 9f : Set cloud server information (*)
sermatec-ess get --el a1 : Query DRM status
sermatec-ess get --el a2 : Forced charge and discharge information
sermatec-ess get --el a3 : Local WIFI module network configuration (*)
sermatec-ess get --el b0 : Set up routers and servers (*)
sermatec-ess get --el b1 : Query routers and servers
sermatec-ess get --el ba : Register settings (*)
sermatec-ess get --el bb : Register query (*)
(*) DO NOT USE!
./sermatec-ess get --el 98
--===~ Sermatec ESS CLI AND MQTT PROXY ~===--
Asking to Sermatec Inverter 10.10.100.254:8899
protocol version number: 609
Battery manufacturer number (code list): PYLON Low-voltage Battery 485
model code: 5kW
product_sn: STXXXXXXXXXXXXXXXXXXX
product_sn_ln: 

MQTT 示例

与 Home Assistant MQTT Discovery 顺畅工作!

$ ./sermatec-ess daemon --help
Daemon mode use sermatec-ess as a MQTT client

Usage: sermatec-ess daemon [OPTIONS] --host <HOST>

Options:
  -m, --host <HOST>  MQTT Server hostname
  -t, --port <PORT>  MQTT Server TCP port [default: 1883]
  -w, --wait <WAIT>  waiting time between two updates (seconds) [default: 300]
  -f, --fork         Detaching from the controlling terminal
  -h, --help         Print help
$ ./sermatec-ess daemon --host 10.10.100.42 --port 1883 -k
--===~ Sermatec ESS CLI AND MQTT PROXY ~===--
Asking to Sermatec Inverter 10.10.100.254:8899
Detaching from terminal
$

需要帮助

我在寻找 5K PCU 固件,特别是 PCU5KSL_609.bin,请帮助我 :)

您可以使用 PCAPdroidf-droid 上转储您的手机与逆变器之间的有效载荷交换,以提供帮助。

待办事项

BB 是一个特殊的查询,用于询问内部寄存器。

  • BB:不要使用或重启!(消息的两部分)

注意

Sermatec 在 AP 模式下

(我们在 Sermatec Interter 上作为客户端连接)

  • Sermatec 逆变器每秒尝试通过 TCP/18899 端口连接到我们的 IP 站点
  • 我们可以在 TCP/8899 端口连接

当 TCP 流打开时,我们可以使用 OSIM 协议

Sermatec 在站点模式下

(Sermatec Interter 会自己连接到 Wi-Fi 接入点)

Sermatec Interter 每秒尝试通过默认端口 19042 连接到 IP 云服务器。

** 这是一个安全问题 **

  • 云服务器可以直接发送命令到 Sermatec 逆变器并重新配置(或破坏)所有内容。
  • 云服务器可以请求查询路由器和服务器(B1)以获取 SSID 和密码 AP!

拒绝服务(DoS)应用程序访问

** 这是一个安全问题 **

寄存器查询(BB)是两部分消息!如果您只发送第一部分消息,您将永远阻塞状态机,并必须重启。

打开的 TCP 端口

  • 23/tcp open telnet
  • 80/tcp open http (UART-TCP 模块网页配置 admin/admin)
  • 8000/tcp open http-alt (?)
  • 8899/tcp open osim(内部)协议

Sermatec TCP 端口连接

云服务器发送...

8.209.71.159是Sermatec欧洲云服务器:您可以尝试。

$ netcat -o 19042.txt 8.209.71.159 19042
...
cat 19042_2.bin 
< 00000000 fe 55 64 14 98 00 00 4c ae                      # .Ud....L.
< 00000009 fe 55 64 14 98 00 00 4c ae                      # .Ud....L.
< 00000012 75 9a b0 f9 8a 06 68 85 fc                      # u.....h..
< 0000001b 75 9a b0 f9 8a 06 68 85 fc                      # u.....h..

很有趣,因为我不知道“75 9a”。也许是为另一种硬件?

依赖项

~9–19MB
~251K SLoC