Webasto NEXT
Status: Vendor Confirmed · Register points: 30 · Transports: Modbus TCP
A curated ModDef profile for the Webasto NEXT. Import it as
webasto.next or load the .moddef.yaml directly.
Connect to one over Modbus TCP 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("webasto-next.moddef.yaml")
dev, _ := client.New(doc, "webasto-next", transport) // your modbus.Transport
v, _ := dev.ReadPoint(ctx, "evse_error_code")
fmt.Println(v)
import {Device} from '@moddef/core';
import {loadDocument} from '@moddef/core/node';
const doc = await loadDocument('webasto-next.moddef.yaml');
const dev = Device.create(doc, 'webasto-next', transport);
console.log(await dev.readPoint('evse_error_code'));
let doc = moddef_core::load("webasto-next.moddef.yaml")?;
let mut dev = Device::new(&doc, Some("webasto-next"), transport)?;
let v = dev.read_point("evse_error_code").await?;
from moddef import Device, load
from moddef.pymodbus import Options, PymodbusTransport
doc = load("webasto-next.moddef.yaml")
transport = await PymodbusTransport.tcp("192.168.1.50", options=Options())
dev = Device.create(doc, "webasto-next", transport)
print(await dev.read_point("evse_error_code"))
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("webasto-next"), &transport);
md_value_t v;
md_dev_read(&dev, MD_STR("evse_error_code"), &v);
auto doc = moddef::Document::view(flash_bytes).value(); // zero-copy over flash
auto dev = moddef::Device::open(doc, "webasto-next", transport).value();
if (auto v = dev->read("evse_error_code"); 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++).
start_charging_session — Start Charging Session
Start a charging session on register 5006, writing 0 and then 1 so the 0-to-1 edge the charger looks for is always produced. Without the leading 0 a second session never starts, because the register keeps the value 1 from the first one. Set charge_current_setpoint or charge_power_setpoint first if the session needs a limit; the document does not tie those writes to this one.
Results
| Field | Type |
|---|---|
charge_state | UINT32 |
cancel_charging_session — Cancel Charging Session
Cancel the running charging session on register 5006, writing 0 and then 2 for the same reason start_charging_session writes 0 and then 1: the register is edge triggered and holding 2 cancels only one session.
Results
| Field | Type |
|---|---|
charge_state | UINT32 |
Measurands
The 4 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 |
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) |
Source
- Profile:
ev-charger/webasto-next/webasto-next.moddef.yaml - Register map: vendor documentation