Skip to content

🚀 New production MODBUS integration for The Pill!#201

Merged
taulfsime merged 38 commits into
ALLTERCO:mainfrom
orlin369:main
May 19, 2026
Merged

🚀 New production MODBUS integration for The Pill!#201
taulfsime merged 38 commits into
ALLTERCO:mainfrom
orlin369:main

Conversation

@orlin369

Copy link
Copy Markdown
Contributor

This PR adds a complete Marstek VenusE RS485/MODBUS-RTU integration and promotes the read-only telemetry scripts to production after hardware validation.

What’s new?

🔌 Marstek VenusE support under the_pill/MODBUS/Marstek/VenusE/

📟 Production console telemetry reader:

  • Battery values
  • AC values
  • Energy statistics
  • Temperature information
  • Operational state
  • Alarm and fault words

📊 Production Virtual Components reader for key live telemetry:

  • Battery voltage/current/power
  • Battery SOC
  • AC voltage/power/frequency
  • Internal temperature
  • Inverter state

🧭 Production status-focused Virtual Components reader for commissioning and diagnostics:

  • State of Charge
  • Charge/discharge limits
  • Temperature information
  • Daily energy statistics
  • Operational state
  • Alarm/fault count

📚 Documentation included:

  • Clean register reference from the Marstek MODBUS CSV files
  • Alarm and fault bit tables
  • Device label/nameplate notes
  • RS485 RJ45 pinout for the tested VenusE unit
  • Shelly UI screenshot
  • Validation notes and remaining control-register TODOs

✅ Hardware validation completed on The Pill with:

  • MODBUS address 1
  • 115200, 8N1
  • Confirmed live register reads
  • Confirmed Virtual Component updates
  • Confirmed RJ45 RS485 pinout
  • Corrected AC frequency scaling to 0.1 Hz based on live device data
  • Manifest and SHELLY_MJS.md updated for production scripts

👥 Who this helps:

  • Installers commissioning a VenusE battery/inverter system
  • Integrators exposing VenusE telemetry through Shelly Virtual Components
  • Developers validating vendor MODBUS maps before building control logic

⚠️ Notes:
The scripts are read-only and do not write MODBUS control registers. Write/control behavior remains intentionally out of scope until FC06/FC10 behavior, signed power direction under load, 32-bit word order under non-zero load, and alarm/fault behavior are validated further.

orlin369 and others added 30 commits March 25, 2026 23:33
…scripts

- button-event-source.shelly.js: routes physical button "one"/"two" events;
  button ONE triggers wifi-provisioning via Script.Eval
- wifi-provisioning.shelly.js: BLE scans for devices matching TARGET_MODEL_IDS
  (array of Gen3/Gen4 model IDs) and provisions them as WiFi STA clients with
  retry queue; includes full Gen3/Gen4 model ID reference in comments
- README.md: updated with section 4 documenting the two-script pair, updated
  TOC, added troubleshooting entries for the new scripts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add aicb2sp.shelly.js: polls voltage, current, power, energy,
  frequency, power factor, temperature; exposes switchOn/switchOff
- Add AICB2SP and GACIA vendor READMEs with register map and wiring
- Update MODBUS root README index with GACIA/ entry
- Update CHANGELOG

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add sen0492.shelly.js: console reader, polls distance and status
- Add sen0492_vc.shelly.js: console + Virtual Component (number:200)
- Add SEN0492 and DFRobot vendor READMEs with full register map,
  cable colours, and wiring table
- Update MODBUS root README index with DFRobot/ entry
- Promote both scripts to production
- Update CHANGELOG

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add screenshot.png showing Distance VC (188 mm) grouped under
  DFRobot SEN0492 in the Shelly UI
- Add Screenshot section to README with caption

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add titles/descriptions for 10 previously undocumented scripts
(BLU Assistant, MODBUS integrations). Enhance sync-manifest-md.py
to auto-extract metadata from source files when --extract-metadata
flag is used and entry has TODO placeholders.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rename Davis screenshot to screenshot.png and add ## Screenshot section to Davis README
- Add rs485-diagram.png/svg to the_pill/MODBUS and reference it in README
- Add missing_screenshots.md listing all examples that still need UI screenshots

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Fronius grid flow integration with virtual component handles

- Add under-development multi-channel Fronius dashboard variant

- Update changelog for the Fronius script changes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
 into dev

# Conflicts:
#	the_pill/MODBUS/DFRobot/README.md
#	the_pill/MODBUS/DFRobot/SEN0492/README.md
#	the_pill/MODBUS/DFRobot/SEN0492/sen0492.shelly.js
#	the_pill/MODBUS/DFRobot/SEN0492/sen0492_vc.shelly.js
#	the_pill/MODBUS/GACIA/AICB2SP/README.md
#	the_pill/MODBUS/GACIA/AICB2SP/aicb2sp.shelly.js
#	the_pill/MODBUS/GACIA/README.md
- add static-config EcoFlow STREAM Ultra load-balancing scripts
- add parent and device README files with usage and screenshot
- record the new HTTP integration in the changelog

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- remove repeated RS485 pinout text from DFRobot and GACIA docs
- remove redundant Davis screenshot block
- trim duplicate entries from the MODBUS root README

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- restructure Tasmota HTTP integrations into collection and device folders
- standardize the Mitsubishi Heavy AC Shelly script and anonymize endpoint placeholders
- add parent and device README files plus screenshot references

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Mark EcoFlow STREAM Ultra VC load balancing as production

- Mark Mitsubishi Heavy Tasmota IR bridge as production

- Update related READMEs, manifest, and generated MJS index

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds modbus_register_scan.shelly.js: a generic single-register FC03/FC04
walker for The Pill that assumes slave address, baud rate, and UART mode are
already known. Designed to run a full discovery pass and print all readable
addresses in the configured range, with OK/exception/timeout counts in the
final summary. Extracted from the V-TAC-specific vtac_modbus_scan so it can
be reused for any MODBUS-RTU device.

Updates utils/README.md to document the new script alongside modbus_scan.shelly.js
and clarifies when to use each utility (bus discovery vs. register-space walking).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds documentation and reverse-engineering notes for the V-TAC VT-66036103
hybrid solar inverter, which exposes RS485 but ships with no public register map.

- README.md: context, persona, file index, and RS485 wiring diagram for The Pill
- label.md: physical label data and official/mirror document links for VT-66036103
- registers.md: all FC03 holding and FC04 input register addresses discovered by
  live scanning on the actual inverter, with raw values at capture time
- register-proposals.md: inferred naming, scaling, grouping, and confidence levels
  for discovered registers based on cross-referencing published electrical specs
  with the INVT single-phase hybrid family (V-TAC identifies INVT as the OEM brand)

Six high-confidence live-telemetry registers identified so far:
  5776 pv1_voltage       0.1 V
  5778 pv2_voltage       0.1 V
  5784 input_voltage     0.1 V
  5786 output_voltage    0.1 V
  5790 power             0.01 W
  5792 frequency         0.01 Hz

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Four scripts for reading and monitoring the V-TAC VT-66036103 inverter via
RS485/MODBUS-RTU from The Pill, all targeting slave ID 1, 9600 8N1:

vtac_six_register_example.shelly.js
  Compact console reader for the six strongest live-telemetry candidates:
  PV1/PV2 voltage, input/output voltage, power, and frequency. Polls every 15s.

vtac_six_register_example_vc.shelly.js
  Virtual Components variant of the above. Auto-creates a group:200 and six
  Number VCs (number:200-205) with appropriate icons, units, and range limits.
  Updates VCs every 15s alongside console output.

vtac_baseline_watch.shelly.js
  Polls all ~100 currently known readable holding and input registers every 15s
  and reports only registers that deviate from their captured baseline values.
  Used to detect which registers move with live inverter state (PV, load, grid).
  Register blocks encoded as compact strings to keep heap usage manageable.

vtac_inferred_reader.shelly.js
  Console reader for the 23 highest-confidence inferred holding registers from
  the proposal map, covering battery limits, PV ratings, AC ratings, grid code
  thresholds, and frequency trip points. Prints scaled values every 15s.

All four are marked @status under development; none go into the manifest yet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Collected vendor and mirror documents for the two main V-TAC hybrid inverter
models in this family (VT-66036103 is the 3.6 kW unit on the bench;
VT-6607103 is the 5 kW sibling sharing the same MODBUS interface):

- vt-6607103.pdf: instruction manual for VT-6607103 (5 kW)
- vt66036103.pdf: instruction manual for VT-66036103 (3.6 kW)
- VT-6607103_Single-phase_hybrid_inverter_5kW.pdf: downloaded from V-TAC
  exports portal; confirms RS485, baud rate options (2400/4800/9600), and
  default slave address 1 — but contains no MODBUS register map
- VT-66036103_manualslib_download.html: ManualsLib mirror page for
  VT-66036103 kept as an offline reference

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
MODBUS/README.md: adds V-TAC/ entry to the device directory listing and
updates the utils/ description to mention register-space discovery alongside
bus-level scanning.

CHANGELOG.md: records all V-TAC work done on this branch — vtac_modbus_scan
iterations, baseline watcher, inferred reader, six-register example, VC
variant, register-proposals.md, power-scale correction (0.1→0.01 W),
and the promotion of vtac_modbus_scan logic to the generic utils scanner.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds screenshot.png showing vtac_six_register_example_vc.shelly.js running
live on The Pill: six Virtual Components (PV1/PV2 voltage, input/output
voltage, power, frequency) with real inverter values in the Shelly app.

Updates README.md to match the project example style:
- Adds ## Screenshot section with image and live-value description
- Fixes label.MD reference to label.md (case)
- Removes "under-development" qualifiers from file descriptions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Brings in V-TAC VT-66036103 hybrid inverter work:
- Generic MODBUS register-space scanner (utils/modbus_register_scan.shelly.js)
- V-TAC scripts: six-register example, VC variant, baseline watcher, inferred reader
- Discovered register data, inferred register map, device documentation
- Datasheets for VT-66036103 and VT-6607103
- Screenshot of live Virtual Components in Shelly app

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Extend min from 125 to 0 and max from 500 to 600 so setValue does not
silently clamp when the inverter reports 0 V (off or below MPPT threshold),
which previously made PV1 and PV2 CVs appear frozen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Marstek VenusE console and Virtual Component readers

- Document register map, RJ45 pinout, validation notes, and screenshots

- Move V-TAC VT6607103 work into its own device folder

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Orlin Dimitrov and others added 8 commits May 15, 2026 18:17
- Correct Marstek VenusE and V-TAC README wiring diagrams

- Keep slave-side B line display consistent with shared MODBUS diagrams

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add readable model and electrical ratings from the device label

- Note best-effort fields and unreadable serial/barcode values

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Correct AC frequency scaling to 0.1 Hz based on live testing

- Add label-backed Virtual Component ranges and defaults

- Update Marstek VenusE README, register notes, screenshot, and changelog
- Add a status-focused Marstek VenusE Virtual Components script

- Document the SOC, limits, temperature, energy, state, and alarm/fault VC mapping

- Update the changelog
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants