MQTT manual
Faikin Australia
Faikin Faikout — MQTT Manual
Controlling and monitoring a Faikin Faikout over MQTT, from first setup through to the full topic, command and setting reference.
A complete guide to controlling and monitoring a Faikin Faikout over MQTT, from first setup through to the full topic, command and setting reference.
This covers the WiFi Faikout module running RevK's firmware (the device is branded Faikout; you may still see the older name Faikin). It applies to S21, X50A and CN_WIRED units alike, since the firmware works out the protocol automatically. Throughout, the example hostname is GuestAC and the example broker IP is 192.168.1.10. Replace both with your own.
On this page
- 1. What MQTT gives you
- 2. Before you start
- 3. Step 1: Point Faikout at your MQTT broker
- 4. Step 2: Confirm it is connected
- 5. The topic structure
- 6. Sending commands
- 7. The control message (the main one)
- 8. Reading status
- 9. Home Assistant over MQTT
- 10. Other platforms
- 11. Faikout Auto over MQTT
- 12. Settings reference
- 13. Troubleshooting
- 14. Quick reference cheat sheet
1. What MQTT gives you
Everything is local. Faikout speaks MQTT on your own network, with no cloud account and no internet dependency. Over MQTT you can:
- Control the unit: power, mode, set-point, fan speed, louvre swing, powerful/econo.
- Read live telemetry the IR remote hides: room, coil/liquid, inlet and outside temperatures, plus model and operating state.
- Drive the Faikout Auto layer: target band, schedules, and an external temperature reference.
- Integrate with Home Assistant (native auto-discovery), openHAB, Node-RED, Domoticz, ioBroker and anything else that speaks MQTT.
MQTT control runs alongside the built-in web interface and the IR remote. A change from any source shows up everywhere within a few seconds.
2. Before you start
You need:
- A
Faikout installed and already connected to your 2.4GHz WiFi (see the Setup manual). You can reach it at
GuestAC.localin a browser. - An MQTT broker on the same network. Common choices are the Mosquitto add-on inside Home Assistant, or a standalone Mosquitto on a Raspberry Pi, NAS or server.
- The broker's IP address or hostname, and a username and password if the broker requires authentication (Home Assistant's broker normally does).
Keep the broker on a network you control. Faikout's MQTT is plain local traffic and is not meant to be exposed to the internet.
3. Step 1: Point Faikout at your MQTT broker
- Browse to
GuestAC.localand open WiFi settings (or hold the device's setup, then connect to itsDaikin/Faikoutaccess point if it is not yet on your WiFi). - In the
MQTT section, enter the
Host (broker IP or hostname, e.g.
192.168.1.10) and, if your broker uses them, the Username and Password. - Make sure the
Hostname is set to something memorable, e.g.
GuestAC. This name becomes part of every MQTT topic, so pick it before you build automations. - Save. Faikout reconnects and begins publishing.
The underlying connection setting is
mqtthost (RevK library standard). The username and password are entered on the same page. You can also change these later over MQTT itself once connected (see Settings reference).
4. Step 2: Confirm it is connected
Subscribe to everything for that device and watch for retained status:
mosquitto_sub -h 192.168.1.10 -u USER -P PASS -t 'state/GuestAC/#' -v
You should see a retained
state/GuestAC message. Its payload reports
online true when the air-con is talking to the module. The bare
state/GuestAC topic is the device's own presence: a payload of
false means the Faikout itself is offline (this is its MQTT will/birth message).
If nothing arrives, jump to Troubleshooting.
5. The topic structure
Faikout uses the standard RevK-library topic layout:
prefix/hostname/suffix
. With hostname
GuestAC:
| Type | Topic | Meaning |
|---|---|---|
| Command |
command/GuestAC/<command>
|
Tells the device to do something now (e.g. power on, set mode). |
| Setting (JSON) |
setting/GuestAC
|
Payload is JSON of one or more settings, e.g.
{"reporting":60}. An
empty payload makes the device publish its current settings back.
|
| Setting (single) |
setting/GuestAC/<name>
|
Sets one setting; payload is the bare value, e.g. topic
setting/GuestAC/reporting payload
30.
|
| State |
state/GuestAC/<aspect>
|
Retained status, published periodically and on change.
state/GuestAC with no suffix is the device's own state (
false = offline).
|
| Event |
event/GuestAC/<x>
|
One-off things that happened. Not retained. |
| Info |
info/GuestAC/<x>
|
Informational messages, not tied to a specific event. |
| Error |
error/GuestAC/<x>
|
Errors are reported here. |
For most automation you only need two of these: publish to
command/GuestAC/control and subscribe to
state/GuestAC.
6. Sending commands
Publish to
command/GuestAC/<command>. Simple commands take no payload; a few take an argument as the payload.
| Command | Payload | Effect |
|---|---|---|
on /
off
|
none | Power on or off. |
heat
cool
auto
fan
dry
|
none | Change mode. |
low
medium
high
|
none | Change fan speed. |
temp
|
a number | Set target temperature, e.g. payload
21.
|
status
|
none | Force an immediate status report. |
control
|
JSON | Set any combination of controls at once (see next section). |
send
|
string / array | Advanced: force-send a raw protocol message, e.g. S21
D62000. Accepts a JSON string or a JSON array of strings. High-bit bytes (0x80 to 0xFF) are written as JSON unicode escapes. For protocol debugging only.
|
Examples:
# Power on
mosquitto_pub -h 192.168.1.10 -t 'command/GuestAC/on' -n
# Switch to cooling
mosquitto_pub -h 192.168.1.10 -t 'command/GuestAC/cool' -n
# Set target to 21 C
mosquitto_pub -h 192.168.1.10 -t 'command/GuestAC/temp' -m '21'
7. The
control message (the main one)
command/GuestAC/control takes a JSON payload and is the cleanest way to set several things at once. The same field names appear in the status JSON, so what you send mirrors what you read.
| Field | Type | Meaning |
|---|---|---|
power
|
boolean | On / off. |
mode
|
H
C
A
D
F
|
Heat, Cool, Auto, Dry, Fan. |
temp
|
number | Target temperature in °C. |
fan
|
A
Q
1–
5
|
Auto, Quiet/Night, or manual levels 1 to 5. |
swingv
|
boolean | Vertical louvre swing. |
swingh
|
boolean | Horizontal louvre swing. |
powerful
|
boolean | Powerful/turbo boost (if the unit supports it). |
econo
|
boolean | Economy mode (if supported). |
streamer
|
boolean | Streamer/air-purifying (if supported). |
target
|
number or
[min,max]
|
A single target temp, or a two-element min/max array. An array forces Faikout Auto mode. |
env
|
number | External room-temperature reference used by Faikout Auto. |
Example: cool to 24°C on auto fan, vertical swing on:
mosquitto_pub -h 192.168.1.10 -t 'command/GuestAC/control' \
-m '{"power":true,"mode":"C","temp":24,"fan":"A","swingv":true}'
Note:
powerful,
econo,
streamer and similar extras are model-dependent. S21 is reverse-engineered and not identical across units, so a switch your unit lacks is simply ignored. The status JSON tells you which controls your unit actually exposes.
8. Reading status
Faikout publishes status to three families of topic:
-
state/GuestACis the human/automation status, published everyreportingseconds (default 60) and on significant changes. Setlivestatuson to also publish on every change in real time. -
Faikout/...is published about once a minute and is intended for thefaikoutlogtool to store in a MySQL/MariaDB database for graphing. -
<MAC>/...is the Home Assistant auto-discovery feed, published when HA support is enabled (see section 9).
The
state JSON includes everything from the
control table above (so you can read back
power,
mode,
temp,
fan, etc.) plus these read-only fields:
| Field | Meaning |
|---|---|
online
|
The air-con is connected and responding. |
heat
|
Currently in a heating state. |
slave
|
We are not master for heat/cool, so the requested mode cannot be applied. |
antifreeze
|
In antifreeze mode, so not operating normally. |
model
|
Model name, if known. |
home
|
Room temperature (remote reference or measured). |
outside
|
Outside temperature, if the unit reports it. |
inlet
|
Inlet (return air) temperature, if known. |
liquid
|
Liquid coolant feed temperature, if known. |
control
|
We are under external/automatic control. |
Database logging format: in the
Faikout/ feed, each value is summarised over the period. If it did not change it is reported as a single value; if it did, a numeric value becomes a
[min, average, max] array and a boolean becomes a fraction
0.0–
1.0 for how much of the period it was true. Set
fixstatus on to always use the array/fraction format regardless.
9. Home Assistant over MQTT
Faikout has native Home Assistant auto-discovery and it is
on by default (setting
haenable, default on). Once the module is talking to the same broker as Home Assistant, a climate entity appears on its own.
Setup:
- Run an MQTT broker that Home Assistant uses. The easiest is the Mosquitto broker add-on in Home Assistant OS, with the MQTT integration added.
- Create an MQTT user in Home Assistant for the device (a normal HA user works with the Mosquitto add-on).
- On the Faikout setup page, set the MQTT host to Home Assistant's IP and enter that username and password.
- Within a minute Home Assistant discovers the device (published under the
<MAC>/...topics) and adds a climate card. No YAML required.
Useful HA-related settings (set via MQTT or the Advanced web page):
| Setting | Default | Effect |
|---|---|---|
haenable
|
on | Home Assistant auto-discovery. (Older firmware called this
ha.)
|
haswitches
|
off | Expose additional switches (e.g. powerful, econo) as separate HA entities. |
ha1c
|
off | Force 1°C steps in the HA temperature control. |
hafanrpm
|
off | Report fan speed as RPM instead of Hz. |
hacomprpm
|
off | Report compressor speed as RPM instead of Hz. |
hadomain
|
local
|
Local domain used for HA links; blank to use the IP. |
nohvacaction
|
off | Stop reporting
hvac_action for Faikout Auto in HA.
|
nohomepreset
|
off | Leave the "home" entry out of the HA preset list. |
Dashboard and entity card YAML
You do not need YAML to
create the entities. Auto-discovery makes a
climate entity plus temperature sensors on its own. The YAML below is for laying them out on a Lovelace dashboard.
Entity IDs are derived from the hostname, so a device named
GuestAC gives
climate.guestac and sensors like
sensor.guestac_temperature. The exact slugs vary with firmware version and your HA naming settings, so confirm them under
Settings → Devices & Services → MQTT → (your device) or
Developer Tools → States, and adjust the IDs below to match.
Entity card. Add a card to any dashboard with Add card → Manual and paste:
type: entities
title: Guest AC
show_header_toggle: false
entities:
- entity: climate.guestac # adjust IDs to match your install
name: Air conditioner
- type: section
label: Live temperatures
- entity: sensor.guestac_temperature
name: Room
- entity: sensor.guestac_outside_temperature
name: Outside
- entity: sensor.guestac_inlet_temperature
name: Inlet
- entity: sensor.guestac_liquid_temperature
name: Liquid / coil
Full dashboard view. Open a dashboard,
Edit → (three dots) → Raw configuration editor, and add this as a new view under
views::
title: Climate
path: climate
icon: mdi:air-conditioner
cards:
- type: thermostat
entity: climate.guestac # adjust IDs to match your install
- type: entities
title: Guest AC
entities:
- entity: climate.guestac
name: Controls
- type: section
label: Live temperatures
- entity: sensor.guestac_temperature
name: Room
- entity: sensor.guestac_outside_temperature
name: Outside
- entity: sensor.guestac_inlet_temperature
name: Inlet
- entity: sensor.guestac_liquid_temperature
name: Liquid / coil
- type: history-graph
title: Temperatures (24 h)
hours_to_show: 24
entities:
- sensor.guestac_temperature
- sensor.guestac_outside_temperature
If you would rather build a single card visually, the
Mushroom "Climate" card and the built-in
Thermostat card both bind to
climate.guestac directly.
Simpler, non-MQTT alternative. Faikout also emulates Daikin's own local API and answers BRP-compatible UDP discovery (setting
udpdiscovery). If you do not want to run an MQTT broker, you can instead add Home Assistant's
built-in Daikin integration and point it at the Faikout's IP address. For non-technical users this is the least fiddly route into HA. Reserve the MQTT path for when you want features the Daikin integration does not expose, or you are integrating with something other than HA.
Apple Home / Alexa / Google. These do not speak MQTT directly, but a bridge closes the gap. Home Assistant bridges all three. For an Apple-only household without HA, Homebridge with an MQTT plugin (for example EasyMQTT) brings Faikout into the native iOS Home app and Siri. It is well-trodden but is a self-hosted server to set up, so expect some configuration.
10. Other platforms
The same two topics (
command/GuestAC/control to write,
state/GuestAC to read) work everywhere.
mosquitto command line
# Watch everything for this device
mosquitto_sub -h 192.168.1.10 -u USER -P PASS -t 'state/GuestAC/#' -v
# Ask the device to report its current settings (empty payload)
mosquitto_pub -h 192.168.1.10 -t 'setting/GuestAC' -n
# Change one setting
mosquitto_pub -h 192.168.1.10 -t 'setting/GuestAC/reporting' -m '30'
# Full control
mosquitto_pub -h 192.168.1.10 -t 'command/GuestAC/control' \
-m '{"power":true,"mode":"H","temp":21,"fan":2}'
Node-RED
- To control: an
mqtt outnode with topiccommand/GuestAC/control. Feed it amsg.payloadthat is a JSON object (use atemplateorfunctionnode, or achangenode setting the payload to a JSON value). - To monitor: an
mqtt innode onstate/GuestAC, then ajsonnode to parse it into an object you can route on (e.g.payload.home,payload.power).
openHAB
Use the generic MQTT binding. Create an MQTT Thing for the broker, then channels such as:
- a Switch channel with
commandTopic = command/GuestAC/control, formatting the value as{"power":%s}; - a Number channel with
stateTopic = state/GuestACand a JSONPATH transformation like$.hometo read room temperature.
The same pattern (publish JSON to
command/.../control, parse JSON from
state/...) maps onto Domoticz, ioBroker, Jeedom, FHEM, Homey, Hubitat and Gladys.
11. Faikout Auto over MQTT
Faikout Auto is an extra control layer that holds a target band by nudging the unit between heat/cool/off, optionally using an external temperature sensor instead of the air-con's own. You can drive it three ways: from the web UI, from a BLE sensor, or over MQTT. The MQTT routes are below.
A. Push a reading from your own automation
Send a
control message containing
env (and optionally
target). The unit then treats itself as under remote control:
mosquitto_pub -h 192.168.1.10 -t 'command/GuestAC/control' \
-m '{"env":22.4,"target":[20,22]}'
-
envis the current room temperature from your sensor. It must be re-sent in every control message and at least everytcontrolseconds (default 600). If it times out, the unit falls back out of remote/auto mode. -
targetas a[min,max]array (or a single number withmargin) forces Faikout Auto mode and defines the comfort band.
B. Subscribe Faikout to a sensor topic
Instead of pushing, tell Faikout to follow an existing MQTT topic:
| Setting | Meaning |
|---|---|
autotopic
|
The MQTT topic to subscribe to for the reference temperature. |
autopayload
|
The field name within that topic's JSON payload that holds the temperature. |
Important: the payload on
autotopic must be
JSON containing the named field. A topic that publishes a bare number (for example a plain ESPHome state topic) will not parse; wrap it in JSON, or use route A.
C. Track an external sensor but keep on/off manual
A common request: control to an accurate external reading, but never let the unit power itself on or off. The catch is that sending
env makes the unit "remote", and when remote, automatic power is assumed if
autoptemp is not zero (default
0.5). So:
- Set
autopoff andautoptemp0 (stops automatic power on/off). - Keep
tempadjuston (this is what actually aims the unit at your reference: it adjusts the set-point byreference - measured). - Do
not send a
targetarray (an array forces full Auto band/power behaviour). Send only{"env": 22.4}.
mosquitto_pub -h 192.168.1.10 -t 'setting/GuestAC' -m '{"autop":false,"autoptemp":0}'
mosquitto_pub -h 192.168.1.10 -t 'command/GuestAC/control' -m '{"env":22.4}'
Auto-mode controls you can also send in a
control message
These mirror the settings and are reported back in status when not under remote control:
| Field | Meaning |
|---|---|
autor
|
Auto margin either side of the target;
0.0 means off.
|
autot
|
Auto target temperature. |
autob
|
BLE sensor ID to use as the reference. |
auto0
|
Turn-off time,
HH:MM;
00:00 means do not turn off.
|
auto1
|
Turn-on time,
HH:MM;
00:00 means do not turn on.
|
12. Settings reference
Settings are read and written over MQTT in two forms:
-
All at once / read back: publish JSON to
setting/GuestAC, e.g.{"reporting":30,"livestatus":true}. An empty payload makes the device publish its current settings. -
One at a time: publish the bare value to
setting/GuestAC/<name>, e.g. topicsetting/GuestAC/livestatuspayloadtrue.
Names below are the MQTT names (the Advanced web page groups them, but over MQTT they are written as one word). This is a working subset; the device's own settings dump (empty payload to
setting/GuestAC) is the authoritative list for your firmware.
Connection and reporting
| Setting | Default | Meaning |
|---|---|---|
hostname
|
— | Device name; forms the topic prefix and
.local address.
|
mqtthost
|
— | MQTT broker host or IP (plus username/password fields on the setup page). |
reporting
|
60 | Status report period in seconds. |
livestatus
|
off | Publish
state/ on every change, in real time.
|
fixstatus
|
off | Always use the min/ave/max (and 0.0–1.0) format in logging. |
otaauto
|
on | Automatic firmware updates (roughly weekly; needs internet). |
webcontrol
|
on | Enable the web control page. |
websettings
|
on | Enable the web settings pages. |
Home Assistant
See section 9:
haenable,
haswitches,
ha1c,
hafanrpm,
hacomprpm,
hadomain,
udpdiscovery,
nohvacaction,
nohomepreset.
Faikout Auto
| Setting | Default | Meaning |
|---|---|---|
autoe
|
on | Enable auto time and power operations. |
autop
|
off | Enable automatic power on/off. |
autoptemp
|
0.5 | Power on/off when temperature deviates from the band by this much. |
autot
|
— | Auto target temperature. |
autor
|
— | Auto margin either side of
autot (0 = off).
|
autob
|
— | BLE sensor ID for the reference. |
auto0 /
auto1
|
00:00 | Scheduled off / on time (
HHMM); equal or
00:00 disables.
|
autofmax
|
5 | Max fan level when starting far from target. |
autolcontrol
|
off | Toggle the LED based on current HVAC action. |
autotopic
|
— | Topic to follow for the reference temperature. |
autopayload
|
— | JSON field name in that topic for the reference temperature. |
tempadjust
|
on | Adjust the set-point for the difference between Daikin's sensor and your reference. |
temptrack
|
off | Base the set-point on Daikin's measured temperature rather than the requested target. |
tempnoflap
|
0 | Minimum seconds between target-temperature changes. |
thermostat
|
off | Simple thermostat mode: heat to max, then let it fall to min (hysteresis). |
tcontrol
|
600 | Timeout (s) for
env/
control messages before reverting out of remote mode.
|
tmin /
tmax
|
16 / 32 | System minimum / maximum set-point. |
thermref
|
50 | Percentage of inlet (vs room) temperature your unit uses as its reference. |
Fine-tuning of the prediction and band behaviour (
pushtemp,
switchtemp,
coolover,
coolback,
heatover,
heatback,
tpredicts,
tpredictt,
tsample,
tcoolmin,
theatmax,
frosttemp,
minoutside) is documented in the Advanced manual and rarely needs changing.
Capability overrides
If the firmware offers a control your unit does not actually have (or vice versa), the
no... settings tell it what to hide: for example
nopowerful,
noecono,
nostreamer,
noswingv,
noswingh,
noquiet,
nodemand,
nofaikoutauto. The protocol-forcing settings
nos21,
nox50a,
nocnwired stop it trying a given protocol if auto-detection picks the wrong one.
Debug
| Setting | Meaning |
|---|---|
debug
|
Verbose debug; for S21, one summary line of poll responses (also polls more fields, so slower). |
dump
|
Output raw serial communications on MQTT. |
snoop
|
Listen-only mode for protocol analysis. |
13. Troubleshooting
Nothing appears on MQTT / device shows offline. Check the bare
state/GuestAC topic:
false means the Faikout itself is not connected to the broker. Then verify the broker IP/hostname in settings is reachable, the MQTT username and password are correct, the broker is listening (usually port 1883 on the LAN), and the module is on your 2.4GHz WiFi (it does not use 5GHz). Confirm
GuestAC.local loads in a browser to prove WiFi is fine, then it is an MQTT-credentials or broker-reachability issue.
The unit keeps switching itself on. Sending
env in a
control message puts the unit under remote control, and when remote, automatic power is assumed if
autoptemp is not zero (default
0.5). To keep on/off manual, set
autop off and
autoptemp 0, keep
tempadjust on, and send only
{"env": ...} with no
target array. See section 11C.
Faikout drops out of Auto mode after a while.
env/
control messages time out after
tcontrol seconds (default 600). Re-send
env in every control message and on a schedule shorter than the timeout.
autotopic does nothing.
The subscribed topic must carry
JSON with the field named in
autopayload. A bare-number payload will not parse. Either publish JSON, or push the value yourself with an
env control message (section 11A).
Home Assistant does not show the device.
haenable must be on (it is by default), the HA MQTT integration must be installed with discovery enabled, and the device must be on the same broker as HA. Confirm discovery messages are arriving by subscribing to
<MAC>/# (the module's MAC address). If you would rather not use MQTT at all, use the native Daikin integration with the Faikout's IP instead.
Status looks stale.
state/ messages are retained, so a client can show the last value after a restart. If you see genuinely old data, clear the retained message on that topic, and turn on
livestatus for instant updates on change.
Some controls do nothing. S21 is reverse-engineered and varies by model;
powerful,
econo,
demand and similar may not exist on your unit and are simply ignored. The status JSON shows which controls your unit really exposes.
14. Quick reference cheat sheet
Replace
GuestAC with your hostname and
192.168.1.10 with your broker.
Read (subscribe)
| Topic | What you receive |
|---|---|
state/GuestAC
|
Retained status JSON:
power,
mode,
temp,
home,
outside,
online, ...
|
state/GuestAC
|
Payload
false means the Faikout itself is offline.
|
setting/GuestAC
|
Publish an empty payload and the device replies with its current settings. |
Commands (publish to
command/GuestAC/...)
| Topic | Payload |
|---|---|
command/GuestAC/on,
command/GuestAC/off
|
none |
command/GuestAC/heat
cool
auto
fan
dry
|
none |
command/GuestAC/low
medium
high
|
none |
command/GuestAC/temp
|
21
|
command/GuestAC/status
|
none (forces a status report) |
command/GuestAC/control
|
JSON (see below) |
The
control payload
{"power":true,"mode":"C","temp":24,"fan":"A","swingv":true}
| Field | Values |
|---|---|
power
|
true /
false
|
mode
|
H
C
A
D
F (heat, cool, auto, dry, fan)
|
temp
|
number, °C |
fan
|
A
Q
1–
5 (auto, quiet, manual levels)
|
swingv
swingh
powerful
econo
streamer
|
true /
false
|
target
|
number, or
[min,max] (an array forces Faikout Auto)
|
env
|
number (external reference for Faikout Auto) |
Settings (publish to
setting/GuestAC...)
| Topic | Payload |
|---|---|
setting/GuestAC
|
{"reporting":30,"livestatus":true} (several at once)
|
setting/GuestAC/reporting
|
30 (one at a time)
|
External sensor, keep on/off manual
| Topic | Payload |
|---|---|
setting/GuestAC
|
{"autop":false,"autoptemp":0}
|
command/GuestAC/control
|
{"env":22.4} — resend within
tcontrol (600 s)
|
Sources: RevK ESP32-Faikout firmware and manuals (README, Setup, Controls, Advanced) and
ESP/main/settings.def on Codeberg (codeberg.org/RevK/ESP32-Faikout). Behaviour described matches the firmware as of June 2026; the device's own settings dump is authoritative for your installed version.