Faikin Ninja P1P2 — MQTT manual
Faikin Australia
Controlling and monitoring a Faikin Ninja P1P2 over MQTT, from first setup through to the full topic, command and sensor reference.
A complete guide to controlling and monitoring a Faikin Ninja P1P2 over MQTT, from first setup through to the full topic, command and sensor reference.
This covers the Faikin Ninja module fitted to a Daikin P1/P2 control bus: VRV and VRF, Sky Air, F-series commercial, and ducted systems with an Airbase or zone controller. Throughout, the example base topic is ac/livingroom and the example broker IP is 192.168.1.10. Replace both with your own.
This is not the same MQTT interface as the Faikin Faikout. The Ninja runs different firmware with a different topic layout, so automations written for a Faikout will not carry over. If you have a Faikout, see the Faikin Faikout MQTT manual instead. Section 5 has a side-by-side comparison.
On this page
- 1. What MQTT gives you
- 2. Before you start
- 3. Step 1: Point the Ninja at your MQTT broker
- 4. Step 2: Confirm it is connected
- 5. The topic structure
- 6. Sending commands
- 7. Ducted zones
- 8. Reading status
- 9. Home Assistant over MQTT
- 10. Other platforms
- 11. System management and options
- 12. Sensor reference
- 13. Troubleshooting
- 14. Quick reference cheat sheet
1. What MQTT gives you
The Ninja's built-in web page is enough for day to day use. MQTT is what you want when you need the air conditioner to be part of something bigger.
- Automation. Trigger the unit from anything: presence, a schedule, an electricity price feed, a door sensor, another room's temperature.
- Real instrumentation. The P1/P2 bus carries far more than on, off and temperature. The Ninja publishes indoor and outdoor thermistors, refrigerant pressures, expansion valve position, compressor and fan state, operating hours and the unit's own error codes. Most of this is invisible from the wall controller.
- Ducted zones. If you have a Daikin zone controller, each damper becomes an individually controllable switch.
- One place for everything. Home Assistant, Node-RED, openHAB and anything else that speaks MQTT can all see the same device at once.
- It stays local. MQTT runs on your own broker on your own network. Nothing leaves the house and there is no account to create.
2. Before you start
You need three things.
- The Ninja on your WiFi, reachable at its own web page. If it is not, do the installation guide first.
- An MQTT broker on your network. If you are running Home Assistant, install the Mosquitto broker add-on; it takes a few minutes and gives you a broker plus a username and password. Otherwise any Mosquitto or compatible broker on a machine that stays on will do.
- The broker's IP address, username and password.
You do not need Home Assistant to use MQTT, and you do not need MQTT to use Home Assistant. They are separate choices that happen to work well together.
3. Step 1: Point the Ninja at your MQTT broker
Open the Ninja's web page and go to the MQTT settings.
| Field | What to put in it |
|---|---|
| Host | Broker IP or hostname, e.g. 192.168.1.10. |
| Port | The broker's port. 1883 unless you have changed it. |
| User | Broker username, if yours uses one. |
| Password | Broker password, if yours uses one. |
| Topic | The first half of the base topic, e.g. ac. |
| Friendly Name | The second half, e.g. livingroom. |
The last two matter more than they look. The Ninja builds every one of its topics from them:
base topic = <Topic> / <Friendly Name>
So Topic = ac and Friendly Name = livingroom gives a base topic of ac/livingroom, and the state topic becomes ac/livingroom/state.
Pick both before you build any automation. Changing them later renames every topic and quietly breaks anything referring to the old ones. A useful convention is one shared prefix for all your units (ac) plus a room name that will not change (livingroom, masterbed, office).
Save, and the module reconnects and begins publishing.
4. Step 2: Confirm it is connected
You do not need a terminal for this. Two places tell you straight away.
On the Ninja's own page
Browse to the module. At the top of the page, beside the device name, it shows its broker status. MQTT connected means the module has reached your broker and is publishing.
If that is missing, either the host, port, username or password is wrong, or the broker is not reachable from the network the module is on. Re-check the MQTT settings, then see Troubleshooting.
In Home Assistant
Nothing to add by hand. The Ninja publishes Home Assistant's MQTT discovery messages, so once it reaches the broker, Home Assistant finds it on its own. As long as the MQTT integration is already set up and pointed at the same broker:
- Go to Settings > Devices & services > MQTT, then open the device list.
- Your device appears within a few seconds, named after the Friendly Name you set.
- Open it and the whole thing is there already: a climate entity with mode, target temperature, fan speed and vane; a long list of diagnostic sensors; and, if you have a zone controller, a switch for each damper zone.
You should never need to hand-write a climate entity in YAML for a Ninja. If you find yourself doing that, something upstream is wrong.
If you would rather check from a terminal
Optional, and only worth it if you already have the mosquitto client tools installed:
mosquitto_sub -h 192.168.1.10 -u USER -P PASS -t 'ac/livingroom/#' -v
You should see ac/livingroom/availability reporting online, and a full JSON payload on ac/livingroom/state.
If nothing arrives, jump to Troubleshooting.
5. The topic structure
Everything hangs off the base topic you built in section 3. With base topic ac/livingroom:
Climate and control
| Topic | Direction | What it does |
|---|---|---|
ac/livingroom/power/set |
you publish | Power on or off. |
ac/livingroom/mode/set |
you publish | Operating mode. |
ac/livingroom/temp/set |
you publish | Target temperature. |
ac/livingroom/fan/set |
you publish | Fan speed. |
ac/livingroom/vane/set |
you publish | Vane position or swing. |
ac/livingroom/zone/<1..8>/set |
you publish | Open or close one damper zone. |
ac/livingroom/state |
module publishes | Full state as one JSON object. |
ac/livingroom/availability |
module publishes |
online or offline. |
System and management
| Topic | Direction | What it does |
|---|---|---|
ac/livingroom/system/set |
you publish |
restart, upgrade or factory. |
ac/livingroom/system/set_safemode |
you publish | Safe Mode on or off. |
ac/livingroom/system/set_min_temp |
you publish | Minimum setpoint limit. |
ac/livingroom/system/set_max_temp |
you publish | Maximum setpoint limit. |
ac/livingroom/system/set_modbus_rtu_id |
you publish | Modbus RTU slave ID. |
ac/livingroom/system/opt/rqt |
you publish | JSON options request. |
ac/livingroom/system/opt/rps |
module publishes | Echo of accepted options. |
ac/livingroom/system/info |
module publishes | Bridge telemetry JSON. |
For most automation you only need three: publish to the .../set topics, and subscribe to state and availability.
If you also have a Faikout
The two products take opposite approaches, so it is worth seeing them together.
| Faikin Faikout | Faikin Ninja P1P2 | |
|---|---|---|
| Topic shape |
command/<host>/..., state/<host>
|
<topic>/<name>/... |
| Setting one control | One JSON control message with many fields |
One small topic per control |
| Reading state | JSON on state/<host>
|
JSON on <base>/state
|
| Presence |
state/<host> payload false
|
<base>/availability payload offline
|
| Settings |
setting/<host> JSON |
<base>/system/... topics |
| Depth of data | Room, coil, outside temp, power | Plus outdoor thermistors, pressures, EV pulses, op hours, error codes |
| Zones | Not supported | Up to 8 damper zones |
6. Sending commands
Publish a plain string to the relevant .../set topic. There is no JSON wrapper: the payload is the bare value.
power/set
| Payload | Effect |
|---|---|
ON |
Turn on, restoring the last mode, temperature, fan and vane. |
OFF |
Turn off. |
mode/set
| Payload | Effect |
|---|---|
heat |
Heating. |
cool |
Cooling. |
dry |
Dehumidify. |
fan_only |
Fan, no heating or cooling. |
off |
Power off. |
temp/set
The target temperature as a number, e.g. 24. Range 16 to 32 °C, in 1.0 °C steps. You can narrow that range with system/set_min_temp and system/set_max_temp (section 11).
fan/set
Which speeds you get depends on the indoor unit. The module reports the ones your unit actually supports; sending one it does not have is ignored.
| Payload | Description |
|---|---|
low |
Low. |
medium |
Medium. |
high |
High. |
auto |
Automatic. |
low_auto |
Low auto (zone and Airbase systems). |
medium_auto |
Medium auto (zone and Airbase systems). |
high_auto |
High auto (zone and Airbase systems). |
The common groupings are:
-
3-speed with auto:
low,medium,high,auto -
2-speed:
low,high -
4-speed zone/Airbase:
low,medium,low_auto,medium_auto -
6-speed zone/Airbase:
low,medium,high,low_auto,medium_auto,high_auto
vane/set
| Payload | Description |
|---|---|
1 |
Position 1, the top. |
2 to 4
|
Intermediate positions. |
5 |
Position 5, the bottom. |
swing |
Continuous vertical swing. |
Examples
# On, cooling, 24 C, auto fan, swinging
mosquitto_pub -h 192.168.1.10 -t 'ac/livingroom/power/set' -m 'ON'
mosquitto_pub -h 192.168.1.10 -t 'ac/livingroom/mode/set' -m 'cool'
mosquitto_pub -h 192.168.1.10 -t 'ac/livingroom/temp/set' -m '24'
mosquitto_pub -h 192.168.1.10 -t 'ac/livingroom/fan/set' -m 'auto'
mosquitto_pub -h 192.168.1.10 -t 'ac/livingroom/vane/set' -m 'swing'
Because each control is its own topic, order does not matter and you can send only the ones you care about.
7. Ducted zones
If a Daikin zone controller is on the P1/P2 bus, the Ninja can open and close each damper.
Publish ON or OFF to ac/livingroom/zone/<n>/set, where <n> is 1 to 8:
# Open zone 1, close zone 3
mosquitto_pub -h 192.168.1.10 -t 'ac/livingroom/zone/1/set' -m 'ON'
mosquitto_pub -h 192.168.1.10 -t 'ac/livingroom/zone/3/set' -m 'OFF'
The state payload reports back:
| Key | Type | Meaning |
|---|---|---|
zone_count |
number | How many zones were discovered, 1 to 8. |
zone_1 … zone_8
|
boolean |
true is open, false is closed. |
zone_name_1 … zone_name_8
|
string | The names configured on the zone controller, e.g. "Master Bed". |
In Home Assistant each active zone is auto-discovered as its own switch, so no configuration is needed.
Two practical notes. Zones only appear if a zone controller is present, so on a plain split there will be no zone keys at all. And closing every zone at once is a good way to make a ducted system unhappy: leave at least one open, or turn the unit off instead.
8. Reading status
The module publishes one complete JSON object to <base>/state whenever anything changes.
Only sensors your unit actually reports appear. The Ninja detects what the connected indoor and outdoor units publish and hides the rest, so your payload will be shorter than the example below, and two different Daikins will produce different keys. This is normal. Write automations against the keys you can see on your own unit.
{
"power": "on",
"mode": "cool",
"action": "cooling",
"temperature": 24,
"fan": "auto",
"vane": "swing",
"room_temperature": 25.5,
"outside_temperature": 32.0,
"f_intake_temp": 25.0,
"f_indoor_th1": 18.2,
"f_indoor_th2": 24.8,
"f_outdoor_th1": 32.0,
"f_outdoor_th3": 75.4,
"f_pe_pressure": 0.83,
"f_pc_pressure": 2.40,
"f_drain_pump": false,
"f_electric_heater": false,
"f_comp_operating": true,
"operating": true,
"f_fan_step": 3,
"f_ev_pulses": 240,
"f_id_op_hours": 1250,
"f_error_present": false,
"f_error_code": "",
"f_indoor_model": "FBA100BVMA",
"f_outdoor_model": "RZA100DV1",
"zone_count": 4,
"zone_1": true,
"zone_2": true,
"zone_3": false,
"zone_4": false
}
The keys worth knowing first:
| Key | Meaning |
|---|---|
power |
on or off. What you asked for. |
mode |
The mode you asked for. |
action |
What the unit is actually doing right now: cooling, heating, idle and so on. This is the one to watch, not power. |
temperature |
Your target, not the room. |
room_temperature |
The room, as the unit measures it. |
operating |
Whether the system is actively running. |
f_error_present / f_error_code
|
Daikin's own fault flag and code, e.g. "A9-01". |
A unit can be "power": "on" with "action": "idle" and that is perfectly normal: it has reached temperature. If you want to know whether it is really working, look at action, operating or f_comp_operating.
Subscribe to <base>/availability as well. offline there means the module has dropped off, which is different from the air conditioner being off.
9. Home Assistant over MQTT
Add the MQTT integration and point it at the same broker. That is the whole setup: the Ninja announces itself and Home Assistant builds everything.
What you get:
- A climate entity with modes
heat,cool,dry,fan_onlyandoff, your unit's fan modes, swing positions1to5andswing, and a 1.0 °C step. - Sensors and binary sensors for every thermistor, pressure, actuator, hour counter, error code and model string your unit reports. Most land under Diagnostic.
- Switches for each active damper zone.
Entity IDs follow the Friendly Name, so with livingroom you will get climate.livingroom, sensor.livingroom_outside_temperature, switch.livingroom_zone_1 and so on. Check the exact names in Developer tools > States before writing YAML.
A dashboard card
type: vertical-stack
cards:
- type: thermostat
entity: climate.livingroom
- type: entities
title: Zones
entities:
- entity: switch.livingroom_zone_1
name: Living
- entity: switch.livingroom_zone_2
name: Master bed
- entity: switch.livingroom_zone_3
name: Study
- entity: switch.livingroom_zone_4
name: Kids
- type: glance
title: Right now
columns: 3
entities:
- entity: sensor.livingroom_room_temperature
name: Room
- entity: sensor.livingroom_outside_temperature
name: Outside
- entity: binary_sensor.livingroom_compressor_operating
name: Compressor
- type: history-graph
hours_to_show: 24
entities:
- sensor.livingroom_room_temperature
- sensor.livingroom_outside_temperature
- sensor.livingroom_od_pc_pressure
An automation
Turning the unit off once the house is comfortable, using action rather than power so it does not fire while the unit is still working:
alias: Living room off when settled
triggers:
- trigger: state
entity_id: climate.livingroom
attribute: hvac_action
to: idle
for: "00:20:00"
conditions:
- condition: numeric_state
entity_id: sensor.livingroom_room_temperature
below: 25
actions:
- action: climate.turn_off
target:
entity_id: climate.livingroom
mode: single
Watching for faults
alias: Air conditioner fault
triggers:
- trigger: state
entity_id: binary_sensor.livingroom_ac_error_present
to: "on"
actions:
- action: notify.mobile_app_phone
data:
title: Air conditioner fault
message: >-
Error {{ states('sensor.livingroom_ac_error_code') }} on
{{ state_attr('climate.livingroom','friendly_name') }}.
mode: single
That one is worth setting up. The error code is the same code a technician would read off the wall controller, and knowing it before you call saves a visit.
10. Other platforms
The same topics work everywhere. Publish strings to <base>/…/set, subscribe to <base>/state.
mosquitto command line
# Watch everything for this device
mosquitto_sub -h 192.168.1.10 -u USER -P PASS -t 'ac/livingroom/#' -v
# Turn on and cool to 23
mosquitto_pub -h 192.168.1.10 -t 'ac/livingroom/power/set' -m 'ON'
mosquitto_pub -h 192.168.1.10 -t 'ac/livingroom/mode/set' -m 'cool'
mosquitto_pub -h 192.168.1.10 -t 'ac/livingroom/temp/set' -m '23'
# Open zone 1
mosquitto_pub -h 192.168.1.10 -t 'ac/livingroom/zone/1/set' -m 'ON'
Node-RED
Use an MQTT in node on ac/livingroom/state with output set to a parsed JSON object, then read msg.payload.power, msg.payload.room_temperature and so on.
To send, use MQTT out with the topic and payload left blank so they come from the message. Payloads must be strings, so convert numbers first.
Set the whole unit in one go:
const base = "ac/livingroom";
return [
{ topic: base + "/power/set", payload: "ON" },
{ topic: base + "/mode/set", payload: "cool" },
{ topic: base + "/temp/set", payload: "24" },
{ topic: base + "/fan/set", payload: "auto" }
];
A dashboard slider driving the target temperature:
msg.topic = "ac/livingroom/temp/set";
msg.payload = String(msg.payload);
return msg;
Turn on only if it is currently off:
const p = typeof msg.payload === 'string'
? JSON.parse(msg.payload)
: msg.payload;
if (p.power !== "on") {
return [{ topic: "ac/livingroom/power/set", payload: "ON" }];
}
return null;
Subscribing to ac/livingroom/availability is a cheap way to grey out your dashboard when the module drops off.
openHAB
Add an MQTT broker Thing, then a Generic MQTT Thing with channels pointing at the topics. A switch channel on ac/livingroom/power/set with ON/OFF, a number channel on ac/livingroom/temp/set, and state channels reading ac/livingroom/state with a JSONPATH transform such as $.room_temperature.
11. System management and options
These live under <base>/system/. Most of them reboot the module, so do not wire them into anything that fires often.
system/set
| Payload | Effect |
|---|---|
restart |
Reboots the module after about three seconds. |
upgrade |
Checks for a firmware update over the air immediately. |
factory |
Clears all stored settings, factory resets and reboots. |
factory wipes your WiFi and MQTT settings too, so the module comes back on its own setup network and has to be reconfigured from scratch. Treat it as a last resort.
Temperature limits
| Topic | Payload | Effect |
|---|---|---|
system/set_min_temp |
16 to 32
|
Sets the lowest target anyone can select. Reboots. |
system/set_max_temp |
16 to 32
|
Sets the highest target anyone can select. Reboots. |
Useful in a rental or an office: cap the range and nobody can set 16 °C in July.
Safe Mode
system/set_safemode with on or off. Reboots.
Modbus RTU ID
system/set_modbus_rtu_id with a number from 1 to 254, for building-management installations using the RS485 build. Reboots.
Options over MQTT
system/opt/rqt takes a JSON object and lets you change several settings at once without the web page:
{
"options": {
"homekit": "On",
"mode": "All",
"safemode": "Off",
"webpanel": "On"
}
}
| Key | Values | Meaning |
|---|---|---|
homekit |
On, Off
|
Apple Home support. |
mode |
All, NoHeat, NoAuto
|
Which modes to expose. NoHeat suits a cooling-only installation. |
safemode |
On, Off
|
Safe Mode. |
webpanel |
On, Off
|
The built-in web page. |
Whatever is accepted is echoed back on system/opt/rps, so subscribe there to confirm rather than assuming.
Turning webpanel off removes your own way back in. Only do it if you are certain MQTT is working.
system/info
Published periodically:
{
"connection_state": "online",
"safe_mode": "Off",
"reset_reason": "Software reset via ESP_RESTART",
"web_panel": "On",
"free_heap": "68.45",
"rssi": "-62",
"bssid": "AA:BB:CC:DD:EE:FF",
"up_time": 172800,
"min_temp": 16,
"max_temp": 32,
"protocol_ver": "P1P2"
}
rssi is the one to watch. Anything worse than about -80 dBm and you should move the module out of the metal casing before blaming anything else.
12. Sensor reference
Everything below is detected automatically. If your unit does not report it, the key is absent from the state payload and no entity is created in Home Assistant. A short list is not a fault.
The main ones
| Key | Name | Unit | Description |
|---|---|---|---|
room_temperature |
Room Temperature | °C | Indoor ambient temperature. |
outside_temperature |
Outside Temperature | °C | Outdoor ambient, from outdoor thermistor 1. |
f_intake_temp |
Intake Temperature | °C | Return air temperature at the indoor unit. |
Indoor thermistors
| Key | Name | Description |
|---|---|---|
f_indoor_th1 |
Indoor TH1 | Liquid pipe. |
f_indoor_th2 |
Indoor TH2 | Gas pipe. |
f_indoor_th3 |
Indoor TH3 | Heat exchanger. |
f_indoor_th4 … f_indoor_th6
|
Indoor TH4 to TH6 | Model specific. |
f_return_air_temp_1f |
Return Air Temp 1F | Decoded return air temperature, where supported. |
f_coil_temp_1f |
Coil Temp 1F | Decoded indoor coil temperature, where supported. |
Outdoor thermistors and pressures
| Key | Name | Unit | Description |
|---|---|---|---|
f_outdoor_th1 |
Outdoor TH1 | °C | Outdoor ambient air. |
f_outdoor_th2 |
Outdoor TH2 | °C | Outdoor heat exchanger. |
f_outdoor_th3 |
Outdoor TH3 | °C | Discharge pipe. |
f_outdoor_th4 |
Outdoor TH4 | °C | Suction pipe. |
f_outdoor_th5, f_outdoor_th6
|
Outdoor TH5, TH6 | °C | Model specific. |
f_pe_pressure |
OD Pe Pressure | MPa | Low-side pressure. |
f_pc_pressure |
OD Pc Pressure | MPa | High-side pressure. |
Discharge temperature and the two pressures together are the closest thing you get to a live health check on the outdoor unit. Graph them over a season and an abnormal reading stands out long before anything trips.
Actuators and running state
| Key | Name | Type | Description |
|---|---|---|---|
f_comp_operating |
Compressor Operating | boolean | Outdoor compressor running. |
f_drain_pump |
ID Drain Pump | boolean | Indoor condensate drain pump. |
f_electric_heater |
ID Electric Heater | boolean | Auxiliary electric heater. |
f_humidifier |
ID Humidifier | boolean | Indoor humidifier. |
f_anti_freezing |
ID Anti Freezing | boolean | Anti-freeze protection active. |
f_solenoid_valve |
OD Solenoid Valve | boolean | Outdoor solenoid valve. |
f_active_1f |
Loop Active 1F | boolean | Loop active indicator. |
f_fan_step |
OD Fan Step | step | Outdoor fan step level. |
f_ev_pulses |
ID EV Pulses | pulse | Indoor expansion valve opening. |
f_ev1_pulses |
OD EV1 Pulses | pulse | Outdoor expansion valve opening. |
Hours and faults
| Key | Name | Unit | Description |
|---|---|---|---|
f_id_op_hours |
ID Op Hours | h | Indoor unit operating hours. |
f_id_fan_hours |
ID Fan Hours | h | Indoor blower hours. |
f_id_pwr_hours |
ID Pwr Hours | h | Indoor unit powered-on hours. |
f_error_present |
AC Error Present | — | Active fault flag. |
f_error_code |
AC Error Code | — | Daikin error code, e.g. "A9-01", "E7-57". Empty when healthy. |
f_has_error_history |
Has Error History | — | Whether the unit holds historical fault records. |
f_indoor_model |
Indoor Model | — | Indoor model string. |
f_outdoor_model |
Outdoor Model | — | Outdoor model string. |
Where the unit keeps a fault history, each recorded event carries a row number, the code, the date and the unit number:
[
{"row": 1, "code": "A9-01", "date": "17/01/24", "unit": 0},
{"row": 2, "code": "E7-57", "date": "10/11/23", "unit": 0},
{"row": 3, "code": "C2-04", "date": "05/08/23", "unit": 0}
]
Module telemetry
| Key | Name | Unit | Description |
|---|---|---|---|
up_time |
Up Time | s | Since last reboot. |
free_heap |
Free Heap | % | Free RAM. |
rssi |
RSSI | dBm | WiFi signal strength. |
bssi |
BSSI | — | BSSID of the access point it is joined to. |
reset_reason |
Reset Reason | — | Why it last restarted. |
protocol_ver |
Protocol Version | — | Active protocol, P1P2. |
min_temp, max_temp
|
Target limits | °C | Configured setpoint limits. |
modbus_rtu_id |
Modbus RTU ID | — | Configured slave ID. |
13. Troubleshooting
No MQTT connected badge on the web page. Check the host and port, then the username and password. If the broker is on a different VLAN or subnet from the module, that is usually the real problem.
Badge shows connected, but nothing appears in Home Assistant. Confirm Home Assistant's MQTT integration is pointed at the same broker. Two brokers on one network is a common and confusing mistake. Then check discovery is enabled in the module's settings.
Some sensors are missing. Expected. Only what the connected units report is published, and a small split will show far less than a VRV. Not a fault.
No zone switches. Zones need a Daikin zone controller on the P1/P2 bus. Without one there is nothing to control.
Commands are ignored. Payloads are plain strings and are case-sensitive as documented: ON and OFF in upper case for power and zones, mode names in lower case. Sending a number rather than a string for the temperature will fail in some clients, Node-RED included.
Temperature will not go where you want. Check min_temp and max_temp in system/info. Someone may have narrowed the range.
It keeps dropping out. Look at rssi in system/info. Around -80 dBm or worse is marginal. Move the module outside the metal casing.
The unit is on but nothing is happening. Look at action and f_comp_operating. If action is idle, it has reached temperature. If the compressor never runs and f_error_present is true, read f_error_code and quote it to your installer.
Everything stopped after a settings change. Renaming the Topic or Friendly Name renames every topic. Your automations are still pointed at the old ones.
14. Quick reference cheat sheet
Base topic ac/livingroom. Replace with yours.
Read (subscribe)
| Topic | Content |
|---|---|
ac/livingroom/state |
Full JSON state |
ac/livingroom/availability |
online / offline
|
ac/livingroom/system/info |
Module telemetry JSON |
ac/livingroom/system/opt/rps |
Echo of accepted options |
Control (publish)
| Topic | Payload |
|---|---|
ac/livingroom/power/set |
ON, OFF
|
ac/livingroom/mode/set |
heat, cool, dry, fan_only, off
|
ac/livingroom/temp/set |
16 to 32
|
ac/livingroom/fan/set |
low, medium, high, auto, low_auto, medium_auto, high_auto
|
ac/livingroom/vane/set |
1 to 5, swing
|
ac/livingroom/zone/1/set … zone/8/set
|
ON, OFF
|
System (publish)
| Topic | Payload |
|---|---|
ac/livingroom/system/set |
restart, upgrade, factory
|
ac/livingroom/system/set_safemode |
on, off
|
ac/livingroom/system/set_min_temp |
16 to 32
|
ac/livingroom/system/set_max_temp |
16 to 32
|
ac/livingroom/system/set_modbus_rtu_id |
1 to 254
|
ac/livingroom/system/opt/rqt |
{"options":{"homekit":"On","mode":"All"}} |
Keys worth watching
| Key | Why |
|---|---|
action |
What it is really doing, not what you asked for |
room_temperature |
The actual room |
f_comp_operating |
Whether the compressor is running |
f_error_present, f_error_code
|
Faults, in Daikin's own codes |
rssi |
WiFi headroom, in system/info
|
Sources: the Faikin Ninja P1P2 MQTT protocol documentation. Behaviour described matches the firmware as of August 2026; your module's own web page and published system/info are authoritative for the version you have installed. Sensor availability varies by indoor and outdoor unit.