ABB Terra AC Wallbox
Status: Vendor Confirmed · Register points: 32 · Transports: Modbus RTU, Modbus TCP
A curated ModDef profile for the ABB Terra AC Wallbox. Import it as
abb.terra-ac or load the .moddef.yaml directly.
Connect to one over Web Serial and watch its values live in the device dashboard.
Usage
Load the profile, bind a transport, and read a point by name. The runtime applies the offset, scaling, byte order, and sentinels from the definition.
- Go
- TypeScript
- Rust
- Python
- C
- C++
doc, _ := moddef.Load("abb-terra-ac.moddef.yaml")
dev, _ := client.New(doc, "abb-terra-ac", transport) // your modbus.Transport
v, _ := dev.ReadPoint(ctx, "user_settable_max_current")
fmt.Println(v)
import {Device} from '@moddef/core';
import {loadDocument} from '@moddef/core/node';
const doc = await loadDocument('abb-terra-ac.moddef.yaml');
const dev = Device.create(doc, 'abb-terra-ac', transport);
console.log(await dev.readPoint('user_settable_max_current'));
let doc = moddef_core::load("abb-terra-ac.moddef.yaml")?;
let mut dev = Device::new(&doc, Some("abb-terra-ac"), transport)?;
let v = dev.read_point("user_settable_max_current").await?;
from moddef import Device, load
from moddef.pymodbus import Options, PymodbusTransport
doc = load("abb-terra-ac.moddef.yaml")
transport = await PymodbusTransport.tcp("192.168.1.50", options=Options())
dev = Device.create(doc, "abb-terra-ac", transport)
print(await dev.read_point("user_settable_max_current"))
md_doc_t doc;
md_doc_init(&doc, flash_ptr, flash_len); /* zero-copy view */
md_dev_t dev;
md_dev_init(&dev, &doc, MD_STR("abb-terra-ac"), &transport);
md_value_t v;
md_dev_read(&dev, MD_STR("user_settable_max_current"), &v);
auto doc = moddef::Document::view(flash_bytes).value(); // zero-copy over flash
auto dev = moddef::Device::open(doc, "abb-terra-ac", transport).value();
if (auto v = dev->read("user_settable_max_current"); v)
std::cout << v->to_string() << '\n';
Commands
Multi-step register procedures (spec §11.7)
this profile defines — write params, arm a trigger, poll for completion, then
read the result. Run one with your language's command executor (RunCommand,
runCommand, run_command, or md_cmd_begin/md_cmd_tick in C/C++).
firmware_update_request — Firmware Update Request
Announce a firmware image before sending it (document section 5.20.1). Writes the version info, the total package length, the CRC of the whole package as supplied by ABB, and the per-package size, then arms the transfer by writing the document's fixed value 3 to Update Mode. Follow it with one firmware_send_package call per package.
Params
| Field | Type | Required |
|---|---|---|
version_info | UINT32 | yes |
package_length | UINT32 | yes |
package_crc | UINT32 | yes |
chunk_size | UINT32 | yes |
firmware_send_package — Send Firmware Package
Ship one package of the firmware image (document section 5.20.2). Writes the total number of split packages, this package's sequence number counting from 1, how many bytes it actually carries (the last one is usually short), the checksum over the payload alone, and then the payload itself at 0x4118. Call it once per package in sequence order. The document gives the payload region no size, so the 123-word length on the data param is the Modbus write ceiling for FC16, not a documented device limit; send exactly the number of bytes named in byte_count, which must not exceed the chunk_size agreed in firmware_update_request.
Params
| Field | Type | Required |
|---|---|---|
total_packages | UINT32 | yes |
sequence_number | UINT32 | yes |
byte_count | UINT32 | yes |
data_checksum | UINT32 | yes |
data | BYTES | yes |
Measurands
The 6 semantic quantities this device reports, each linked to the measurand catalog. Query a device by measurand instead of a raw point when you want portable code.
| Base quantity | Name | Unit | Description |
|---|---|---|---|
current | Current | A | RMS current; qualify with phase_ref / direction |
voltage | Voltage | V | RMS voltage; qualify with phase_ref (L1_N, L1_L2, ...) |
active_power | Active Power | W | Instantaneous real power |
energy_active | Active Energy | Wh | Cumulative active energy register |
fault_code | Fault Code | undefined | Vendor fault code (enum or integer) |
device_status | Device Status | undefined | Overall device operating status (enum) |
Source
- Profile:
ev-charger/abb-terra-ac/abb-terra-ac.moddef.yaml - Register map: vendor documentation