TapHome

Daikin DTA116A51 VRV Gateway

Modbus RTU
Submitted by
Last updated: 03. 2026

Requires external gateway

Daikin DTA116A51

Daikin DTA116A51 VRV Gateway

The Daikin DTA116A51 is a DIII-NET/Modbus Communication Adaptor that bridges Daikin VRV systems to TapHome via RS-485 Modbus RTU. The gateway connects to the VRV DIII-NET bus on one side and exposes Modbus registers on the other, allowing TapHome to monitor and control up to 16 indoor units and 2 outdoor units through a single adaptor.

Each indoor unit is addressed using a DeviceNumber variable (0–15) within TapHome. A separate module instance must be created for every indoor unit to be controlled. The template provides ON/OFF switching, operation mode selection, fan speed and direction control, and thermostat functionality with room temperature feedback.

Hardware connection

Board overview
Daikin DTA116A51 PCB component layout — DIP switches DS1 and DS2, RS-485 port, DIII-NET port, power supply connector and status LEDs

The DTA116A51 sits between the HA system (TapHome) and the VRV installation. The Modbus side uses RS-485 wiring with a maximum cable length of 500 m. The DIII-NET side connects to the VRV indoor and outdoor units.

Key components on the PCB:

  • DS1 — Communication parameter DIP switch (baud rate, parity, stop bits)
  • DS2 — Modbus slave address DIP switch (address 1–15)
  • R(+) / B(-) — RS-485 Modbus communication port
  • DIII-NET port — Connection to VRV indoor/outdoor units
  • Power supply connector — DC power input
  • H1P–H7P, HAP — Status indicator LEDs
RS-485 wiring

Connect the RS-485 port on the DTA116A51 to TapHome Core:

  • R(+) on DTA116A51 → A+/D+ on TapHome
  • B(-) on DTA116A51 → B-/D- on TapHome

The maximum RS-485 cable length is 500 m. Use twisted pair cable (CAT5 or similar) for reliable communication. Ensure proper bus termination on the last device.

Configuration

DIP switch settings

DS1 — Communication parameters:

PinFunctionOFFON
1Reserved
2Baud rate9600 bps19200 bps
3Stop bit1 stop bit (parity enabled)2 stop bits (no parity)
4Parity (when DS1-3=OFF)EvenOdd

For TapHome: Set DS1 to all OFF (9600 bps, even parity, 1 stop bit) — this matches the template defaults.

DS2 — Slave address (1–15):

DS2 Pins (1–4)Address
OFF OFF OFF ON1 (default)
OFF OFF ON OFF2
OFF OFF ON ON3
OFF ON OFF OFF4
ON ON ON ON15

Set the slave address to 0 to disable Modbus communication entirely.

TapHome setup
  1. Import the template — select “Daikin DTA” from the Modbus RTU templates
  2. Set the Slave ID — enter the address matching DS2 on the adaptor
  3. Create the first module — set the DeviceNumber variable to 0 for indoor unit 1-00
  4. Create additional modules — for each additional indoor unit, create a new module instance and set DeviceNumber to the corresponding unit index (0–15)

Each module instance controls one indoor unit. The DeviceNumber maps directly to the DIII-NET indoor unit address (0 = unit 1-00, 1 = unit 1-01, etc.).

Before controlling units, verify connectivity using the Indoor Unit (N) Connection service attributes on the module. These show which units are physically connected on the DIII-NET bus.

Initialization procedure

After powering on the VRV system and the DTA116A51 adaptor:

  1. Poll the Adaptor Status service attribute until it reports “Ready”
  2. Check the Indoor Unit Connection service attributes to identify connected units
  3. TapHome automatically synchronizes register values — the adaptor only sends DIII-NET commands when a holding register value changes

Status synchronization is critical. The DTA116A51 sends commands to VRV units only when a holding register value changes. TapHome handles this automatically, but if registers become desynchronized (e.g., after a power cycle), the first command for each function may be ignored. Toggle the value twice to force a change if needed.

Device capabilities

ON/OFF and operation mode
  • ON/OFF — turns the addressed indoor unit on or off
  • Operation Mode — selects Fan, Heating, Cooling, Auto, Setpoint, or Dry mode. Available modes depend on the indoor unit’s capability flags. Setpoint mode is only available for non-Master Cool/Heat units; Auto mode is only available for non-Slave Cool/Heat units
Fan control
  • Fan Volume — selects fan speed. Units with 2-step capability support Low and High; units with 3-step capability support Low, Medium, and High. The “Not capable” value appears if the unit does not support fan speed control
  • Fan Direction — controls the vane position from P0 (horizontal) through P4 (vertical), plus Stop and Swing positions. Available positions depend on the indoor unit’s fan direction capability (Fix, 2-step, 3-step, 4-step, or 5-step)
Temperature control
  • Thermostat — reads the current room temperature and allows setting the desired temperature setpoint with 0.1 °C resolution. Both values use a /10 conversion from the raw register data
Service diagnostics

The module exposes 19 service attributes for monitoring:

  • Adaptor Status — reports whether the DTA116A51 gateway is ready for communication
  • Indoor Unit (1–16) Connection — shows which indoor units are physically connected on the DIII-NET bus
  • Cooling Mode Capability and Fan Mode Capability — report whether the addressed indoor unit supports cooling and fan-only modes

The module ReadScript monitors communication errors for all 16 possible indoor units via register A:6. If a communication error is detected for any unit, TapHome reports an error message identifying the affected device number.

Additional capabilities

The DTA116A51 adaptor also exposes registers for heating/auto/dry mode capability flags, fan direction and volume step counts, per-unit setpoint limits (cooling and heating ranges), forced off status, actual operation status (heating/cooling/fan), filter sign monitoring and reset, Cool/Heat master/slave status, per-unit error diagnostics with error code lookup, temperature sensor health, and DIII-NET initial settings (address range management, master flag). These can be added in a future template update.

The number of control commands for one indoor unit must be within 7,000 times per year. If TapHome uses automatic control programs (e.g., schedules, scenes), ensure the total command count stays within this limit to avoid communication issues.

LED status indicators

LEDFunction
H1PBlinks when the adaptor sends a DIII-NET command
H2PBlinks when the adaptor receives a DIII-NET command
H3PBlinks when the adaptor sends a Modbus response
H4PBlinks when the adaptor receives a Modbus query
HAPBlinks at 400 ms intervals during normal operation

Normal state: HAP blinks regularly, H3P/H4P blink during Modbus communication, H1P/H2P blink during DIII-NET communication.

Troubleshooting

No Modbus communication (H3P/H4P not blinking)
  1. Verify RS-485 wiring: R(+) → A+/D+, B(-) → B-/D- on TapHome
  2. Check DS2 slave address — must be 1–15 (not 0)
  3. Confirm DS1 settings match TapHome: 9600 baud, even parity, 1 stop bit
  4. Check bus termination on the last device
  5. Ensure the silent interval between queries is at least 5 ms (at 9600 bps)
Adaptor status remains “Not ready”
  1. Verify DIII-NET cable connection between the adaptor and VRV indoor units
  2. Ensure the VRV system is powered on
  3. Check that the DIII-NET master flag in register 40001 is set correctly — if another central controller is installed, the adaptor should be set to Slave mode (bit 9 = 0)
Commands not reaching VRV units
  1. This is typically a status synchronization issue — the adaptor only sends commands when a holding register value changes
  2. Read the current status from input registers and verify the holding registers match
  3. Toggle the desired value twice (e.g., OFF → ON → OFF → ON) to force a register change
  4. Ensure the interval between writes to the same register is at least 0.5 seconds
Indoor unit shows “Unconnected”
  1. Check the DIII-NET wiring to the indoor unit
  2. Verify the indoor unit’s DIII-NET address matches the DeviceNumber in TapHome (DeviceNumber 0 = address 1-00)
  3. Power cycle the adaptor and wait for the “Ready” status

Available devices

Daikin DTA116A51 Module
Service Attributes
Adaptor StatusGateway readiness — Not ready during initialization, Ready when DIII-NET communication is established
Cooling Mode CapabilityWhether the addressed indoor unit supports cooling mode
Fan Mode CapabilityWhether the addressed indoor unit supports fan-only mode
Indoor Unit (1) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (2) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (3) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (4) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (5) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (6) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (7) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (8) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (9) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (10) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (11) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (12) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (13) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (14) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (15) ConnectionDIII-NET bus connection status — Connected or Unconnected
Indoor Unit (16) ConnectionDIII-NET bus connection status — Connected or Unconnected

Daikin DTA

Read (module)
IF(GETBIT(MODBUSR(A, 6, Uint16),0) = 1, ADDERROR("Communication Error with device 1"));
IF(GETBIT(MODBUSR(A, 6, Uint16),1) = 1, ADDERROR("Communication Error with device 2"));
IF(GETBIT(MODBUSR(A, 6, Uint16),2) = 1, ADDERROR("Communication Error with device 3"));
IF(GETBIT(MODBUSR(A, 6, Uint16),3) = 1, ADDERROR("Communication Error with device 4"));
IF(GETBIT(MODBUSR(A, 6, Uint16),4) = 1, ADDERROR("Communication Error with device 5"));
IF(GETBIT(MODBUSR(A, 6, Uint16),5) = 1, ADDERROR("Communication Error with device 6"));
IF(GETBIT(MODBUSR(A, 6, Uint16),6) = 1, ADDERROR("Communication Error with device 7"));
IF(GETBIT(MODBUSR(A, 6, Uint16),7) = 1, ADDERROR("Communication Error with device 8"));
IF(GETBIT(MODBUSR(A, 6, Uint16),8) = 1, ADDERROR("Communication Error with device 9"));
IF(GETBIT(MODBUSR(A, 6, Uint16),9) = 1, ADDERROR("Communication Error with device 10"));
IF(GETBIT(MODBUSR(A, 6, Uint16),10) = 1, ADDERROR("Communication Error with device 11"));
IF(GETBIT(MODBUSR(A, 6, Uint16),11) = 1, ADDERROR("Communication Error with device 12"));
IF(GETBIT(MODBUSR(A, 6, Uint16), 12) = 1, ADDERROR("Communication Error with device 13"));
IF(GETBIT(MODBUSR(A, 6, Uint16),13) = 1, ADDERROR("Communication Error with device 14"));
IF(GETBIT(MODBUSR(A, 6, Uint16),14) = 1, ADDERROR("Communication Error with device 15"));
IF(GETBIT(MODBUSR(A, 6, Uint16),15) = 1, ADDERROR("Communication Error with device 16"));
Service Attributes
Adaptor status
SWITCH(MODBUSR(A, 0, Bool), 1, "Ready", 0, "Not ready", "Error")
Cooling Mode capability
SWITCH(GETBIT(MODBUSR(A, 997 + (3*DeviceNumber), Uint16), 1), 0, "Not exist", 1, "Exist", "Error");
Fan mode capability
SWITCH(GETBIT(MODBUSR(A, 997 + (3*DeviceNumber), Uint16), 0), 0, "Not exist", 1, "Exist", "Error");
Indoor unit (1)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),0), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (2)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),1), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (3)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),2), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (4)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),3), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (5)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),4), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (6)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),5), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (7)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),6), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (8)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),7), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (9)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),8), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (10)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),9), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (11)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),10), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (12)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),11), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (13)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),12), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (14)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),13), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (15)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),14), 0, "Unconnected", 1, "Connected", "Error");
Indoor unit (16)
SWITCH(GETBIT(MODBUSR(A, 1, Uint16),15), 0, "Unconnected", 1, "Connected", "Error");
Fan Direction Multi-value Switch

Vane position control — P0 through P4 (horizontal to vertical), Stop, or Swing

Register: H:1997+(DN×3) UInt16 bitfield
Values / States: P0 · P1 · P2 · P3 · P4 · STOP · Swing

Fan Direction

Read switch state
GETBITS(MODBUSR(H, 1997 + (DeviceNumber*3), UInt16), 8,3);
Write switch state
var reg := MODBUSR(H, 1997 + (DeviceNumber*3), UInt16);
MODBUSW(H, 1997 + (DeviceNumber*3), UInt16, SETBITS(reg,4,4, 6));
reg := MODBUSR(H, 1997 + (DeviceNumber*3), UInt16);
MODBUSW(H, 1997 + (DeviceNumber*3), UInt16, SETBITS(reg,8,3, Mu));
Fan Volume Multi-value Switch

Fan speed selection — available steps depend on indoor unit capability (2-step: Low/High, 3-step: Low/Medium/High)

Register: H:1997+(DN×3) UInt16 bitfield
Values / States: Not capable · Low · Medium · High

Fan Volume

Read switch state
GETBITS(MODBUSR(H, 1997 + (DeviceNumber*3), Int16), 12, 3);
Write switch state
var reg := MODBUSR(H, 1997 + (DeviceNumber*3), UInt16);
MODBUSW(H, 1997 + (DeviceNumber*3), UInt16, SETBITS(reg,4,4, 6));
reg := MODBUSR(H, 1997 + (DeviceNumber*3), UInt16);
MODBUSW(H, 1997 + (DeviceNumber*3), UInt16, SETBITS(reg,12,3, Mu));
Operation Mode Multi-value Switch

HVAC operating mode — Fan, Heating, Cooling, Auto, Setpoint (slave units), or Dry

Register: H:1998+(DN×3) UInt16 bitfield
Values / States: Fan · Heating · Cooling · Auto · Setpoint · Dry

Operation Mode

Read switch state
GETBITS(MODBUSR(H, 1998+(DeviceNumber*3), Int16), 0, 4)
Write switch state
var reg :=MODBUSR(H, 1998+(DeviceNumber*3), UInt16);
MODBUSW(H, 1998+(DeviceNumber*3), UInt16, SETBITS(reg, 0, 4, mu));
ON/OFF Switch
Register: H:1997+(DN×3) UInt16 bitfield

ON/OFF

Read switch state
GETBIT(MODBUSR(H, 1997 + (DeviceNumber*3), UInt16), 0);
Write switch state
var reg := MODBUSR(H, 1997 + (DeviceNumber*3), UInt16);
MODBUSW(H, 1997 + (DeviceNumber*3), UInt16, SETBIT(reg,0,St));
Thermostat Thermostat

Room temperature reading and setpoint control with 0.1 °C resolution

Register: A:1998+(6×DN)H:1999+(DN×3) Int16 Unit: °C numeric

Thermostat

Read temperature
MODBUSR(A, 1998 + (6*DeviceNumber), Int16) / 10
Read desired temperature
MODBUSR(H, 1999+(3*DeviceNumber), Int16)/10
Write desired temperature
MODBUSW(H, 1999 + (DeviceNumber*3), Int16, Se*10);
Connection: Modbus RTU • 9600 baud• 8E1 • Slave ID: $[SlaveId]
Possible improvements (14)
  • A:997+(3×DN) bits 2–4 Heating/Auto/Dry Mode Capability — Capability flags for heating (bit 2), auto (bit 3), dry (bit 4) modes — only cooling and fan capability exposed in template
  • A:997+(3×DN) bits 5–7 Fan Direction Level Capability — Fan direction step count (Fix/2step/3step/4step/5step) — useful for UI to show only available positions
  • A:997+(3×DN) bits 9–11 Fan Volume Level Capability — Fan volume step count (Fix/2step/3step) — useful for UI to show only available fan speeds
  • A:997+(3×DN)+1, A:997+(3×DN)+2 Setpoint Limits (Cooling/Heating) — Cooling upper/lower limits and heating upper/lower limits per indoor unit — 8-bit signed integer pairs
  • A:2000+(6×DN) bits 1 Forced Off Status — Bit 1 of status register N+0 — indicates if indoor unit is in forced off state
  • A:2000+(6×DN) bits 2–4 Fan Direction Status (Read) — Current fan direction from status register — template only reads/writes via holding register
  • A:2000+(6×DN) bits 5–7 Fan Volume Status (Read) — Current fan volume from status register — template only reads/writes via holding register
  • A:2001+(6×DN) bits 3–6 Filter Sign Status — Filter sign (0=Off, 1-15=On) per indoor unit — no filter monitoring in template
  • A:2001+(6×DN) bits 7–8 Operation Status — Actual thermal operation: 0=Fan, 1=Heating, 2=Cooling — not exposed in template
  • A:2001+(6×DN) bits 13–14 Cool/Heat Master Status — 0=Not decided, 1=Slave, 2=Master — determines which modes are available
  • A:2003+(6×DN) Error Info — Malfunction bit (9), warning bit (10), error code (bits 0-3 value1, bits 4-8 value2) — per-unit error diagnostics with code lookup table
  • A:2005+(6×DN) Temperature Sensor Status — Bit 8=sensor error, bit 15=data received — temperature sensor health per indoor unit
  • H:1998+(DN×3) bits 3–6 Filter Sign Reset — Write 15 to reset filter sign, then set back to 0 — not exposed in template
  • H:0 DIII-NET Initial Settings — Bit 0=managed address range, bit 9=DIII-NET master flag, bit 14=communication start/stop — stored in EEPROM, applied after power cycle

Sources

  • Daikin DTA116A51 Functional Specifications — DIII-NET/Modbus Communication Adaptor
    2026-03-22
    PDF