Skip to content

Commit 2d918e5

Browse files
committed
feat: add read-only EyeBond short-ASCII driver for Anern SPI-12000W
Poll MD/Q1/F/RB over FC4 and solicit bare 5AA5 MPPT frames for PV, with schema-backed decoding and catalog support for this OFFG collector family.
1 parent ad0b442 commit 2d918e5

12 files changed

Lines changed: 1329 additions & 8 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,19 @@ the GitHub release body should be rendered from the matching version section her
77

88
## [Unreleased]
99

10+
### Added
11+
12+
- Added a read-only **EyeBond short-ASCII** driver (`eybond_short_ascii`) for
13+
OFFG / URTU1920 collectors that speak FC4 `MD`/`Q1`/`F`/`RB` (not Modbus or
14+
G-ASCII), with catalog support for **Anern SPI-12000W**. Exposes identity,
15+
mode flags, ratings, BMS SoC / pack voltage / currents, a discharge-only BMS
16+
DC load proxy, and MPPT PV via bare TCP `5AA5…02` → `aabb0200` (same elicit
17+
path SmartValue/cloud uses). Writes stay rejected; Q1 load% is coarse and
18+
instantaneous grid-import watts are not on the proven read surface. An `RB`
19+
response with pack-voltage raw 0 and SoC 0 is treated as a lost BMS link,
20+
even when trailing fields are nonzero, so stale SoC and current values are
21+
not replaced by false zeros.
22+
1023
### Fixed
1124

1225
- Collector framed/AT transports now discriminate bare MPPT `aabb` frames from EyeBond FC4 on the callback socket, complete AABB waiters without corrupting negotiated forward mode, and project last-PV snapshots into `collector_info` for drivers that solicit `5AA5…02`.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
{
2+
"schema_version": 1,
3+
"model_key": "anern_spi_12000w",
4+
"manufacturer": "Anern",
5+
"model": "SPI-12000W",
6+
"aliases": ["URTU1920", "EyeBond OFFG short-ASCII"],
7+
"lifecycle": "experimental",
8+
"variants": [
9+
{
10+
"variant_key": "offg_family",
11+
"label": "EyeBond FC4 short-ASCII read-only",
12+
"device_descriptor_keys": [
13+
"anern_spi_12000w",
14+
"eybond_short_ascii_family"
15+
],
16+
"known_firmware": [
17+
"collector FW 8-50-18-3",
18+
"ATVER 1.14",
19+
"UART 9600 8N1",
20+
"inverter MD S2-8127-260108-V7.3B"
21+
]
22+
}
23+
],
24+
"validation": {
25+
"hardware": "captured",
26+
"telemetry": "partial",
27+
"controls": "none"
28+
},
29+
"coverage": {
30+
"runtime_control_surface": "read_only",
31+
"smartess_control_surface": "not_applicable",
32+
"vendor_register_map": "partial",
33+
"notes": [
34+
"Read-only MD/Q1/F/RB over EyeBond FC4 short-ASCII; live PV is solicited with bare 5AA5 and merged from the aabb0200 reply.",
35+
"MP/RH and writes remain deferred.",
36+
"Wire Forward2Device uses devcode 0x02FF even when ValueCloud lists 0x19B4.",
37+
"Battery-mode load watts: BMS DC proxy while discharging (Q1 load% often stuck at 0).",
38+
"Grid/Mains Direct: mode and voltages proven; no instantaneous grid-import watts on the known read surface (SmartValue agrees).",
39+
"RB pack-voltage raw 0 and SoC 0 (trailing fields may be nonzero) = BMS link lost: publish bms_link_ok=False only; omit SoC/V/I so DELTA holds last-good. True SoC 0% with non-zero pack voltage still publishes."
40+
]
41+
},
42+
"known_limitations": [
43+
"Read-only first implementation; no write controls are exposed.",
44+
"Q1 Load Percentage often reports 0% with real AC load (battery and grid); SmartValue shows the same.",
45+
"No proven instantaneous grid-import power (W) while Mains Direct / bypass; external metering may be required.",
46+
"aabb PV/LOAD fields are unavailable when the bounded 5AA5 solicitation receives no aabb0200 reply (typical at night).",
47+
"When RB pack-voltage raw and SoC are both 0, trailing fields may still be nonzero; SoC/V/I are omitted (bms_link_ok off) rather than published as 0 — History may hold last-good until the link returns.",
48+
"Do not treat APK bse_crtu_*/SON/SOFF paths as safe without hardware confirmation."
49+
],
50+
"knowledge_summary": "Anern SPI-12000W behind an EyeBond I2000 collector speaks EyeBond FC4 short ASCII (MD/Q1/F/MP/RH/RB), plus a bare 5AA5 runtime query whose aabb0200 reply supplies live PV. Read-only runtime exposes SoC/BMS, mode flags, ratings, and a discharge-only BMS load proxy. BMS link loss (RB pack-voltage raw 0 and SoC 0, regardless of trailing fields) omits SoC zeros; true empty SoC with pack voltage still publishes 0%. Instantaneous grid-import watts are not available on the proven cloud/local surface when Mains Direct.",
51+
"source_keys": ["support_archive_anern_spi12000_short_ascii_20260914"]
52+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"schema_version": 1,
3+
"source_key": "support_archive_anern_spi12000_short_ascii_20260914",
4+
"kind": "support_archive",
5+
"title": "Anern SPI-12000W EyeBond FC4 short-ASCII capture",
6+
"reference": "private:maintainer_pack_anern_spi12000",
7+
"captured_at": "2026-09-14",
8+
"visibility": "private",
9+
"summary_publishable": true,
10+
"summary": "Private collector-to-cloud tee plus SmartValue v2.35.4 APK analysis and live HA↔SmartValue correlation (2026-09-14) show Anern SPI-12000W uses EyeBond FC4 short-ASCII MP/Q1/MD/F/RH/RB (CMD+device_addr+CR), with live PV elicited by bare 5AA5 and returned as aabb0200; wire_devcode 0x02FF collector 0xFF, UART 9600 8N1. ValueCloud lists devcode 6580 (0x19B4). Battery SoC/BMS and discharge load proxy proven; RB pack-voltage raw 0 and SoC 0 (trailing fields may be nonzero) is BMS link loss (omit SoC zeros, bms_link_ok off) not a true empty pack. Q1 load% often 0 with real load; Mains Direct has no instantaneous grid-import watts on the known read surface (SmartValue agrees). Writes (W/SON/SOFF) are excluded.",
11+
"assertions": ["runtime_compatibility", "telemetry_validation"]
12+
}

0 commit comments

Comments
 (0)