Skip to content

Releases: bluetti-community/bluetti-modbus

0.34.0

Choose a tag to compare

@chpego chpego released this 25 Sep 04:55
32ec216

Fixed

  • A Balco Transfer Hub is now read field by field. Raw blocks from a hub showed it answering a 5-register read with a word inserted partway through and the rest shifted one register late - the DSP version decoding from a 2, the grid frequency from the DSP's high word, the PV total from two unrelated registers. It answers with the right count and no error, so nothing failed loudly. balcotrans joins ISOLATED_RANGE_DEVICES: one read per field, which is how every reading that matched the app was taken. (#110, bluetti-registers#29)

Full Changelog: 0.33.0...0.34.0

0.33.0

Choose a tag to compare

@chpego chpego released this 24 Sep 19:18
f8a439c

Fixed

  • AC200L: the battery current read ten times low. b_c_total is scaled 0.1, not the assumed 0.01 - confirmed on a second unit charging at 810 W from the grid, where 0.1 gives 14.4 A into the pack, 94 % of the grid input. (#109, bluetti-registers#31)

Full Changelog: 0.32.0...0.33.0

0.32.0

Choose a tag to compare

@chpego chpego released this 24 Sep 13:38
436b72d

Fixed

  • A Balco Transfer Hub serves ten registers a block. A 15-register read came back correct for its first ten registers and wrong for everything past them - the two firmware versions and the grid frequency read values those registers never return one at a time. max_span is now 10 for balcotrans. (#107, bluetti-registers#29)
  • The hub's battery voltage is scaled 0.01: 535 V where the connected station holds 53.5 V (bluetti-registers 0.0.47).

Full Changelog: 0.31.0...0.32.0

0.31.0

Choose a tag to compare

@chpego chpego released this 24 Sep 12:14
d525b01

Added

  • get_device("balcotrans") reads a Balco Transfer Hub - 27 read-only fields from bluetti-registers 0.0.46, every one confirmed against the BLUETTI app on two real hubs, one charging a power station and one feeding the grid. The hub has no battery of its own: its SOC, battery voltage and PV registers carry the connected station's values, and d_inverter_total is signed - negative while charging. No writable register is served by this firmware. (#106)

Full Changelog: 0.30.4...0.31.0

0.30.4

Choose a tag to compare

@chpego chpego released this 23 Sep 21:07
3e92762

Fixed

  • bluetti-modread no longer prints the whole read a second time. print_component() lists every public property a component class adds alongside its fields, and BluettiDevice.values is one, so each run ended with a values {...} row repeating every row above it. The command prints the rows itself now, from the same reflection, with the properties left out; a repeating group still prints as its own block. (#103)

Full Changelog: 0.30.3...0.30.4

0.30.3

Choose a tag to compare

@chpego chpego released this 23 Sep 20:30
9b0f734

Both found on a real Balco 260.

Fixed

  • bluetti-modwrite no longer reports a stale value as the result of its own write. The device applies a setting immediately and serves the old one for a moment: writing b_soc_low 15 → 16 read back 15, and the next command read 16. The read-back now waits (--settle, 2 s by default) and looks again; a value that never appears is reported as what the device says. (#102)
  • An unreachable device prints one line instead of a traceback, in both commands. (#102)

Full Changelog: 0.30.2...0.30.3

0.30.2

Choose a tag to compare

@chpego chpego released this 23 Sep 20:13
a3260c5

Fixed

  • Installs on Python 3.12. The package declared >=3.13, so pip install "bluetti-modbus[cli]" refused every version on a machine one release behind - which is where a command-line tool tends to be run. Nothing in the code needed 3.13, and every dependency accepts 3.12. The test suite passes on both, and CI now runs both. (#101)

Full Changelog: 0.30.1...0.30.2

0.30.1

Choose a tag to compare

@chpego chpego released this 23 Sep 06:45
7536f02

Fixed

  • bluetti-modwrite takes the reader's transports: --serial, --baud, --parity, --stopbits, --unit, with --host/--serial mutually exclusive. 0.30.0 shipped it TCP-only two commits after the reader learned serial; a device readable over RS485 is now writable over it. (#100)
  • It reads one register instead of the whole device: writing a setting ran a full refresh twice - fifteen block reads each time on a Balco 260 - on a stack that serves one client at a time. It now reads the field being written, before and after. (#100)
  • The confirmation prompt no longer holds a connection open: the read closes behind itself, the prompt happens with nothing open, the write opens its own connection. (#100)

Full Changelog: 0.30.0...0.30.1

0.30.0

Choose a tag to compare

@chpego chpego released this 23 Sep 05:01
3b1aa76

Added

  • Modbus RTU over a serial line. BluettiModbusClient(device_type=..., serial_device=...) takes a port path or any pyserial URL - socket://ip:port reaches a serial-to-TCP gateway, where the line settings live in the gateway. unit_id (1 by default) picks the device on a shared bus and message_spacing paces requests further apart than the backend's own inter-frame gap. bluetti-modread gains --serial, --baud, --parity, --stopbits and --unit. For an EP2000's RS485 port (bluetti-community/bluetti-registers#42); not verified against hardware yet - no BLUETTI unit is known to answer as a Modbus slave on RS485. (#97)
  • bluetti-modwrite, a published counterpart to bluetti-modread: writes one setting register, with the same flags as the bluetti-modwrite in Patrick762's own bluetti-modbus-lib. It refuses an unknown or read-only field (listing the writable ones), a value outside the bounds the profile declares, and the AC output switch unless --allow-ac-output; it prints old -> new, asks before sending, and reads the value back. (#99)

Fixed

  • An enum field asked to be writable now is: field() dropped writable on that branch alone, so the first mode or selector a profile declares would have been generated read-only. No shipped profile has one. (#96)
  • message_spacing is passed to the backend only when a caller asked for pacing: at the declared modbus-connection floor (4.11.1) that argument is a plain float, and None raised TypeError before a connection was opened. Introduced in #97, never released. (#98)

Changed

  • README: serial usage and the write command. HARDWARE_TESTING: never transmit on an RS485 bus the device itself drives - listen RX-only first, then read one request at a time.

Full Changelog: 0.29.0...0.30.0

0.29.0

Choose a tag to compare

@chpego chpego released this 21 Sep 19:33
d27a040

Added

  • FridgePower: the DC output switch and the grid charging switch are writable (57005, 57009), from bluetti-registers 0.0.45 - same-value writes on a real unit confirmed them at the Balco family's internal addresses (2012, 2207), now on file. The SOC thresholds refused a write and stay read-only; the AC output and grid feed-in switches are untried. (#95)

Changed

  • Write probe and testing guide: disable the Home Assistant integration entry itself (not only its devices) and restart Home Assistant before a write test - the unit serves one client at a time. (#95)

Full Changelog: 0.28.1...0.29.0