Add River 3 telemetry and schema-based diagnostics
Decode River 3 separately and accumulate partial reports against a field-level checklist. Keep watch mode running after completion. Label fields and nested records from the pinned pr705 schema. Preserve unknown values and document unverified meanings and routing. Add synthetic regressions, the River 3 field reference, schema-generation tooling, and upstream attribution.
This commit is contained in:
@@ -73,17 +73,18 @@ curl --fail --location --output bmspy/ecoflow_keydata.py \
|
||||
|
||||
This file is ignored by Git and excluded from packages. Type 1 devices do not need it.
|
||||
|
||||
#### Dump a River 2
|
||||
#### Dump both Rivers
|
||||
|
||||
Device arguments use `name@ADDRESS/SERIAL/USERID`. Replace the placeholders below
|
||||
with the device's Bluetooth address, serial number, and your account user ID:
|
||||
with each device's Bluetooth address, serial number, and your account user ID:
|
||||
|
||||
```bash
|
||||
uv run --extra ecoflow-bt bmspy-server --socket /tmp/bmspy-rivers.sock \
|
||||
-d 'river2@RIVER2_MAC/RIVER2_SERIAL/YOUR_USER_ID'
|
||||
-d 'river2@RIVER2_MAC/RIVER2_SERIAL/YOUR_USER_ID' \
|
||||
-d 'river3@RIVER3_MAC/RIVER3_SERIAL/YOUR_USER_ID'
|
||||
```
|
||||
|
||||
Leave the server running. In another terminal, print its snapshot:
|
||||
Leave the server running. In another terminal, print both snapshots:
|
||||
|
||||
```bash
|
||||
uv run bmspy --socket /tmp/bmspy-rivers.sock
|
||||
@@ -98,7 +99,7 @@ before retrying. Unavailable devices are omitted from the response.
|
||||
|
||||
#### Diagnostics
|
||||
|
||||
Stop the server before connecting directly. Scan and collect reports from nearby supported devices:
|
||||
Stop the server before connecting directly. Scan and collect reports from both Rivers:
|
||||
|
||||
```bash
|
||||
uv run --extra ecoflow-bt python -u tools/ecoflow-bt.py --user-id YOUR_USER_ID --scan --timeout 30
|
||||
@@ -114,18 +115,20 @@ add `--device ADDRESS`. Without scanning, replace `--scan` with
|
||||
Session keys stay internal. The script has no encryption override or key-export option.
|
||||
|
||||
River 2 collection waits for three valid core reports, not optional inverter or
|
||||
solar reports. A timeout reports incomplete collection. Use `--watch` to receive
|
||||
later reports.
|
||||
solar reports. River 3 waits for 53 baseline fields across several reports.
|
||||
These checks do not guarantee every possible field. A timeout reports incomplete
|
||||
collection. Use `--watch` to receive later reports.
|
||||
|
||||
River 2 reports charge, temperature, power, and time estimates. Missing measurements
|
||||
stay absent. See the [River 2 measurement reference](docs/ecoflow-river2-fields.md)
|
||||
for units, decoding rules, and known limits.
|
||||
Both models report charge, temperature, power, and time estimates through separate
|
||||
decoders. Missing measurements stay absent. See the
|
||||
[River 2 measurement reference](docs/ecoflow-river2-fields.md) and
|
||||
[River 3 field reference](docs/ecoflow-river3-fields.md) for units, decoding rules,
|
||||
and known limits.
|
||||
|
||||
Client snapshots include all complete River 2 heartbeat fields under
|
||||
`ef_river2_*`, alongside the shared measurements and raw packets.
|
||||
Partial reports retain earlier field values. See the
|
||||
[River 2 field reference](docs/ecoflow-river2-fields.md#reported-fields-available-to-clients)
|
||||
for names, units, and limits.
|
||||
Client snapshots also include reported protocol fields under `ef_river2_*` and
|
||||
`ef_river3_display_*`, alongside the shared measurements and raw packets.
|
||||
Partial reports retain earlier field values. Nested River 3 groups use JSON text
|
||||
in their `info` fields. The references above describe names, units, and limits.
|
||||
|
||||
### Running via systemd
|
||||
|
||||
|
||||
Reference in New Issue
Block a user