Load Management
Three distinct features are grouped here. They are independent and can be enabled in any combination — the same top-level name is used mostly for historical reasons:
1. Station role (standalone / master / slave)
Defines how this physical station relates to other Salia stations on
the same network. Configured via the setmasterip write endpoint and
persisted across reboots.
standalone— default; no coupling to other stations.master— this station coordinates a cluster of slaves; RFID tag lists and protection settings are broadcast to slaves.slave— this station receives configuration from the master at the given IP; local RFID and protection changes are overwritten by master syncs.
Switching role updates role, masterip, sync_rfidtags (0 or 290),
and sync_protection (0 or 290) in the persisted configuration. See
the salia/setmasterip write for the exact message format.
2. Internal Load Management (LMinternal)
Dynamic current sharing between the two charging sockets on a single
station (or between this station and one slave station). Configured via
the salia/LMinternal write and persisted across reboots.
Side effects when enabled: the charge controller honors a new
fourth current-limit lane, ci/global/dyn_current_limit/lmd_limit, in
addition to the external / internal / manual lanes documented under
Charging Control → Current limit composition.
The effective offered current is the minimum across all four lanes.
Writing salia/LM/internal/max_amp is the primary way to set the LMD
lane, and also clamps and republishes port0/salia/max_amp (the
station's configured maximum), so an enabled LM setup effectively
reshapes both the per-pole cap and the dynamic floor the controller
regulates against.
This means: enabling internal LM can lower the offered current even
if the client never writes LM/internal/max_amp explicitly — the
LMD lane defaults to whatever the master decided during its last
allocation cycle. If you see charging suddenly capped after enabling
LM, inspect LM/internal/status and the ci/global/dyn_current_limit/*
topics to find the binding lane.
3. Time control (Zeitsteuerung)
Scheduled charging windows configured in the web UI. Exposed read-only
here via tc_enabled (on/off flag) and limit_tc (the effective
current limit imposed by the active schedule, in Amperes; equals
max_amp when no schedule is restricting).
Time control is orthogonal to the other two features — it can be on or off regardless of role or internal-LM state. It does not introduce an additional lane in the current-limit composer; its effect shows up via the regular internal lane.
Get internal load management status
Returns a status string from the internal load-management daemon.
- When internal LM is disabled, the literal string
"internal lm not activated"is returned. - When enabled, the daemon publishes a pipe-delimited status string describing cluster state, connected sockets, and current allocation. The exact format is considered an internal debugging aid; treat the payload as opaque and do not parse it in clients — the layout changes between firmware versions.
To determine whether internal LM is active, a string-equality check
against "internal lm not activated" is the most stable approach.
Get internal load management status › Responses
LM status retrieved
Enable or disable internal load management
Enables, disables, or reconfigures the Internal Load Management feature (current sharing between sockets on this station and optionally one slave station).
The body value is a pipe-delimited command string, not JSON. The accepted forms are:
| Value | Effect |
|---|---|
disable | Turn internal LM off (sets active = false in the persisted LM configuration). |
enable|master|<slave_ip> | Make this station the master of the pair. Slave at <slave_ip> is registered as the "right charging socket"; this station becomes the "left charging socket". Pole max is set to 32 A. |
enable|slave | Make this station a slave. Pole max is set to 32 A; the master IP is expected to be configured separately (via setmasterip). |
ignore_meter_available::1 | Allow LM to proceed even without a meter reading available. |
ignore_meter_available::0 | Require meter availability for LM operation (default). |
Side effects of enabling
- Updates the persisted LM configuration with
active: true,internal.active: true,internal.role,internal.pole_max_amp: 32, and (for master)internal.sockets[]. - Introduces the LMD lane in the current-limit composer (see
Current limit composition). Offered
current is now bounded by
lmd_limitin addition to the three standard lanes. - Until
LM/internal/max_ampis written, the LMD lane value is whatever the daemon last allocated, which may be lower than the station's configuredmax_amp. Integrators enabling LM should typically follow up with anLM/internal/max_ampwrite to establish a known starting point. - Does not restart the daemon; changes take effect on the next regulation cycle (typically ≤ 1 s).
Side effects of disabling
- Sets
active: falsein the persisted LM configuration. The LMD lane is no longer consulted; the effective current limit reverts to the three standard lanes.
Enable or disable internal load management › Request Body
salia/LMinternalPipe-delimited command (see description).
Enable or disable internal load management › Responses
Internal LM state updated
resultSet per-pole maximum current (LMD lane)
Writes the LMD lane of the current-limit composer in Amperes,
and simultaneously updates the station's configured max_amp cap
that the internal regulator sees.
This write is special-cased by the REST handler and fans out to three MQTT topics:
port0/salia/LM/internal/ts= current Unix timestamp (server-side).port0/salia/max_amp= the clamped value (updates the station's configured max).ci/global/dyn_current_limit/lmd_limit= the clamped value (updates the LMD lane directly).
The value is clamped on the server to the station's configured
min_current / max_current, same as grid_current_limit.
Only meaningful when internal LM is active. If LM is disabled,
writing this still publishes the three topics above, but the
lmd_limit is ignored by the charge controller. The side effect on
port0/salia/max_amp will still apply.
Integer Amperes, as a string (e.g. "16").
Set per-pole maximum current (LMD lane) › Request Body
salia/LM/internal/max_ampLMD-lane current limit in Amperes (integer).
Set per-pole maximum current (LMD lane) › Responses
LM max_amp updated
resultSet station role (standalone / master / slave)
Changes the station's cluster role relative to other Salia stations on the network. Persisted across reboots.
| Value | Resulting config |
|---|---|
"" (empty string) | role = "standalone", masterip = "", sync_rfidtags = 0, sync_protection = 0 |
"master" | role = "master", masterip = "", sync_rfidtags = 0, sync_protection = 0 |
| any other string (treated as an IP address) | role = "slave", masterip = <value>, sync_rfidtags = 290, sync_protection = 290 |
Side effects
sync_rfidtagsandsync_protectionintervals (in seconds) are rewritten from scratch on every role change. Custom values are lost.- After switching to
slave, RFID tag list and protection settings will be overwritten on the next sync tick from the master. Local edits made in between are lost. - Switching from slave back to master or standalone does not restore any previously overwritten RFID list — the last synced state from the master is what remains.
- Role change does not restart the station; the new role takes effect immediately for sync behavior.
Set station role (standalone / master / slave) › Request Body
salia/setmasteripEmpty → standalone. "master" → master. Any other value
(IP address) → slave with that master.
Set station role (standalone / master / slave) › Responses
Role updated
resultGet time control status
Returns whether time control (Zeitsteuerung) is currently active:
"1"— Enabled: a schedule is configured and in effect."0"— Disabled: no schedule is restricting charging.
Time control lets the operator configure time-of-day charging
windows via the web UI. While a restrictive window is active, the
internal regulator lowers the current to limit_tc (see below). This
is not an API-writable endpoint; use the web UI (Configuration →
Time Control) to configure schedules.
Get time control status › Responses
Time control status retrieved
Get time control current limit
Current limit applied by time control in Amperes.
- When a time-control window is actively restricting charging, this is the per-window limit (e.g. a reduced overnight cap).
- When no window is restricting, this equals the configured
max_amp— time control does not reduce the current below that default.
Time control's effect is enforced through the station's internal
regulator lane (salia/intctrl_limit). Reading limit_tc shows
the setpoint time control currently wants; reading intctrl_limit
shows what the regulator has actually published (which may differ
briefly during transitions).
Get time control current limit › Responses
Time control limit retrieved

