3 个版本
0.2.5 | 2024年1月12日 |
---|---|
0.2.3 | 2023年6月17日 |
0.2.1 | 2023年5月14日 |
#616 in 网络编程
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
,请帮助我 :)
您可以使用 PCAPdroid 在 f-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