Appearance
Reference — Blue Airco gateway
The MUXEN devices this gateway publishes
| Device | Function | Instance | What it carries |
|---|---|---|---|
| HVAC | 21 | one per port — see below | one air conditioner: temperature, set point, mode, fan speed, on/off |
| Generic I/O | 17 | configured (InstanceNum), default 255 (not addressed) | the box's own relay and analog input |
A gateway publishes one HVAC device per port that has a unit answering on it, so between zero and four, plus its own I/O device.
How an HVAC instance is chosen, in this order:
- If the port has a stored
InstanceNum— written as a parameter, or allocated with the port configuration routine — it takes that one, and keeps it even while its unit is absent. - Otherwise, the first time a unit answers, it takes the number of the port, counted from zero: serial 1 → 0, serial 2 → 1, serial 3 → 2, serial 4 → 3.
- If that number is already held by another port of the same box, it walks up to the first free one. Other boxes on the boat are not consulted.
The generic I/O device takes its instance from InstanceNum and publishes nothing until that number is below 63 and EnGenIo is 1.
MQTT topics on the Brain follow device/<function>/<instance>/<frame>, so an air conditioner left on the first port is device/21/0/life.
What it publishes
device/21/<instance>/life, once a second:
| Field | Meaning |
|---|---|
realTemp | the temperature the unit measures — return air on an EVO, room temperature on a pre-EVO — in whole °C |
tempSetPoint | the temperature the unit is aiming at, in whole °C, rounded to the nearest degree |
currentMode, currentModeCode | heating 0 · cooling 1 · deshum 2 · auto 3 · fan 4 |
fanSpeed, fanSpeedCode | auto 0 · min 1 · med 2 · max 3 · eco 4 |
runningMode, runningModeCode | OFF 0 · ON 1 |
BindToParc | the battery park this unit is counted in, and stopped by |
counter | a rolling counter, to tell a fresh message from a repeat |
An EVO unit reports its fan speed as auto, min, med or max; a pre-EVO one as auto, eco, med or max.
device/17/<instance>/… carries the box's own relay and analog input; its fields are the ones common to every gateway of this family, see Reference.
Commands
Published to device/21/<instance>/command:
| Payload | Effect |
|---|---|
{"command":0,"parameter":0} | switch the unit off |
{"command":0,"parameter":1} | switch the unit on |
{"command":0,"parameter":2} | auto — this gateway treats it exactly like on |
{"command":1,"parameter":<°C>} | set the target temperature, whole degrees |
Nothing else is carried: mode and fan speed cannot be commanded.
Commands are discarded while the unit is absent, and the unit's own controller may refuse them. An EVO unit that raises its "operation prohibited" flag rejects every write, and the gateway does not even attempt one.
Set-point windows
A value outside the window of the unit is dropped in silence — it is never clamped, and never sent.
| Unit | Mode | Accepted |
|---|---|---|
| EVO | heating | 20 … 40 °C |
| EVO | any other mode | 10 … 30 °C |
| pre-EVO | any | 18 … 30 °C |
What the gateway does on its own
Two things move a unit without the boat asking.
The battery park. Once a second per unit, the gateway reads the park named by BindToParc and forces the unit off unless that park reports no charge needed or moderate load and its charge is at least MinSocToWork percent. A park that is overloaded, low, off or simply not reporting therefore keeps the unit off.
A port bound to 255 (standalone) watches no battery and never stops its unit. That is what a port takes the first time a unit is detected on it, unless a park has already been chosen.
The logic expression. If RemoteCmdEqn is not empty it is evaluated against MUXEN bus signals, and every rising edge of its result toggles the unit on or off. The toggle is applied only while the battery conditions above allow the unit to run.
Parameters — HVAC (function 21)
One set per port. They follow the port, not the instance number: giving a port a new instance keeps its settings.
| Parameter | Type | Default | Meaning |
|---|---|---|---|
InstanceNum | 0…63 | 255 — not configured | the instance of this air conditioner. Left at 255, the port takes the port number when a unit answers |
BindToParc | 0…63, or 255 | 254 (autodetect), becomes 255 on first detection | the battery park this unit is stopped by. 255 = standalone, never stopped |
MinSocToWork | % | 20 | below this charge of the bound park, the unit is switched off |
RemoteCmdEqn | text | empty | logic expression over MUXEN bus signals; each rising edge toggles the unit on/off |
RemoteAddr | 1 | not used by this gateway — the Modbus address is fixed at 1 | |
MinSetPoint, MaxSetPoint | °C | 18, 30 | not used by this gateway — the windows come from the unit's own protocol |
ProductId, HardwareId, SoftwareId, SoftwareVersion | read-only | see Reference |
Changes take effect at the next restart — write with --reboot.
Parameters of the generic I/O device are the ones common to every gateway of this family: Reference. EnAnalogPwr is not used by this firmware: on the board that has a switchable sensor supply, that supply is switched on at every start whatever the parameter says.
Timings
| Each port polled every | 500 ms |
HVAC life published every | 1 s per unit |
| Unit declared absent after | 30 s without a valid answer |
| A silent port tries one register map every | 500 ms — both are tried within about a second |
| Modbus response timeout | 500 ms |
| Generic I/O published every | 500 ms, and on change |
| Alarms republished every | 1 s |
| Alarms carried at once | 32 |
The Blue Airco side
| Link | RS-485, 2-wire half duplex, line termination enabled by the firmware |
| Protocol | Modbus RTU, 9600 8N1, slave address 1 — all fixed by the firmware |
| Units | one per port, four ports |
| Register maps | EVO and pre-EVO, detected by probing, one map per pass |
On an EVO unit the gateway reads the on/off coil, the mode, fan speed and set-point holding registers, and the input block that carries the return-air, indoor-coil, outdoor-coil and discharge temperatures plus the two fault words. Only the return-air temperature is published; the other three are read as part of the block and not used. It writes the on/off coil and the set-point register.
On a pre-EVO unit it reads one block of input registers and publishes the room temperature, the set temperature, the run mode, the fan speed and the on/off flag from it. It writes the on/off register and the set-point register.
Nothing else is written. In particular the gateway never changes a unit's Modbus address, its mode or its fan speed.
Fault codes — EVO units only
An EVO unit reports its faults in two words, one per board. The gateway raises the matching MUXEN alarm while a bit is set and clears it when the bit goes away.
| Unit code | Fault | MUXEN alarm |
|---|---|---|
| E1 | return-air temperature sensor | 18 HvacAlarm_TroomSensorFailed |
| E2 | indoor coil temperature sensor | 19 HvacAlarm_TincoilSensorFailed |
| E3 | outdoor coil temperature sensor | 21 HvacAlarm_ToutcoilSensorFailed |
| E4 | indoor fan | 22 HvacAlarm_FanMotorFailed |
| E5 | discharge temperature too high | 38 HvacAlarm_TdisOvertop |
| E6, E26 | communication | 27 HvacAlarm_CommError |
| E7 | discharge temperature sensor | 23 HvacAlarm_TdisSensorFailed |
| E8 | outdoor coil too cold | 24 HvacAlarm_LowTemp |
| E9 | refrigerant low pressure | 25 HvacAlarm_LowPressure |
| E10 | refrigerant high pressure | 26 HvacAlarm_HighPressure |
| E11, E14, E25 | AC current too high | 6 HvacFault_AcCurrentOvertop |
| E12, E21 | DC bus voltage too low | 5 HvacFault_DcVoltageLow |
| E13, E22 | DC bus voltage too high | 4 HvacFault_DcVoltageOvertop |
| E15, E27 | DC bus imbalance | 37 HvacAlarm_board_failure |
| E18 | compressor blocked | 7 HvacFault_SynchLoss |
| E19 | drive temperature sensor | 32 HvacAlarm_internal_sensor_failure |
| E20 | drive board too hot | 17 HvacFault_IPM_TempAbnormal |
| E23 | output phase loss | 9 HvacFault_PhaseLackCurrent |
| E24 | input phase loss | 8 HvacFault_PhaseLackSpeed |
| E28 | input voltage too low | 39 HvacFault_AcVoltageLow |
| E32 | current detection circuit | 14 HvacFault_ADOffsetAbnormal |
Bit 15 of the first word is not a fault: it is the unit's "operation prohibited" flag. No alarm is raised for it, and while it is set the gateway attempts no write at all.
E15 and E27 share a MUXEN code with nothing of their own. They are reported as a board failure so that a unit in fault never looks healthy on the bus, but the label does not name the real problem. Read the E-code on the unit's panel.
Not reported: E17, E29, E30 and E31 have no MUXEN equivalent and raise no alarm.
Known limitations
- Pre-EVO units raise no alarm at all. They carry no fault word for the gateway to read.
- E15/E27 are reported under a shared, unspecific code, and E17, E29, E30, E31 are not reported.
- Mode and fan speed are read-only.
- Temperatures and set points are carried in whole degrees, so a set point entered in tenths on the unit's panel is rounded on the boat.
RemoteAddr,MinSetPointandMaxSetPointexist in the parameter list but have no effect.
Versions
| Hardware | Version | Image |
|---|---|---|
| CAN/Modbus (990010053) | 5.17 | 010010028-MODBUS-app_blue_airco-firmware.srec |
| CAN/Serial v2 (990010063) | 6.6 | 010010028-SERIAL-V2-app_blue_airco-firmware.srec |
