Schemas
PhaseStatus
Phase switching status as exposed on the phase_switching/status topic:
idle— No phase switch in progress. Ready for a new request.progress— A phase switch has been accepted and is in progress. This covers the full lifecycle from request through the physical relay operation until feedback is received (or a 60-second timeout elapses and the previous phase is restored). The status returns toidlein all terminating cases — success, timeout, or abort.
The station has a finer-grained internal state machine (request → wait
for permission → switching → feedback/timeout), but only the collapsed
idle / progress values are published to this topic. Integrators
should poll this topic and treat idle as "safe to issue the next
command" without trying to distinguish sub-states.
CpState
IEC 61851-1 Control Pilot states:
A— No vehicle connectedB— Vehicle connected, not chargingC— Vehicle connected, chargingD— Vehicle connected, charging with ventilation requiredE— Error / no powerF— EVSE not available
ChargeMode
High-level behavior profile of the charging station. Determines how the station's internal regulator sets the offered current and how it interacts with solar/battery data, phase switching, and the configured min/max Amperes. See each value for the concrete side effects applied when switching into that mode.
Selecting a mode is persistent — the choice survives a reboot. Switching to an unknown value is silently ignored.
eco — Solar-surplus charging
The station tracks available PV / grid surplus and modulates the
internal-lane current so the vehicle consumes (approximately) only
what the PV system is exporting. It targets the configured min_amp
as a floor and uses metering data (salia/mains/...) to decide how
much headroom is available. With Power+ (salia/ecoplus) enabled,
the station is allowed to supplement insufficient surplus with grid
power; with Power+ disabled (default), it will pause rather than
pull from the grid.
Side effects on switching into eco:
salia/manctrl_limitis reset tomax_amp(as on every mode change).- Internal limit (
ci/global/dyn_current_limit/internal_limit) is set to:min_ampif the EV is currently charging (CP state C or D) — so the solar-surplus regulator can take over from a known-low floor.max_ampotherwise.
- No automatic phase switch.
ecoplusis not changed; whatever was previously configured remains.
power — Maximum-power charging
The station ignores solar surplus and delivers the highest current the
hardware and configuration allow. This is the right mode for integrators
that want a deterministic "charge as fast as possible" baseline on top of
which an external controller can lower the current via grid_current_limit.
Side effects on switching into power:
salia/manctrl_limitis reset tomax_amp.- Internal limit (
ci/global/dyn_current_limit/internal_limit) is set tomax_amp. salia/ecoplusis forced to"0"(Power+/Eco+ is disabled, because it is a feature of eco mode and has no meaning here).- If phase switching is supported on the hardware
(
phase_switch_enabled), an automatic switch to 3-phase is triggered by publishingsalia/phase_switching/setphase = "3". If phase switching is not supported, the station stays on whatever phase configuration it is wired for.
manual — Manual current control
The station does not run solar-surplus logic and does not force any
phase change. The offered current is whatever the manual lane
(salia/manctrl_limit) is set to — typically by the built-in web UI's
current slider. External integrators writing to grid_current_limit
still apply, since the effective offered current remains the minimum
across the external / internal / manual lanes.
Side effects on switching into manual:
salia/manctrl_limitis reset tomax_amp(same as on every mode change).- No change to phase, ecoplus, or the internal lane.
Choosing a mode as an integrator
- To control current from an external EMS / FEMS: use
power(ormanual) and then drivegrid_current_limit.ecois unsuitable because the internal regulator will keep adjusting the internal lane based on its own solar-surplus view, potentially overriding your setpoint. - If the offered current is not rising when you raise
grid_current_limit, check the internal lane (salia/intctrl_limit) — see Current limit composition.

