ParkAir is a custom Home Assistant integration that provides a native climate
entity for the reverse-engineered ParkAir air conditioner. It dynamically
generates TCL112 infrared commands and sends them through a Tuya TS1201 IR
blaster paired with Home Assistant's built-in ZHA integration. MQTT and
Zigbee2MQTT are not required.
Since version 2.1.2, the package includes local icon and logo assets in the
brand/ directory. Home Assistant 2026.3 and newer display these assets
automatically.
Since version 2.2.0, the repository includes hacs.json and automated HACS and
Hassfest validation workflows, making it ready for installation through HACS.
- power on and off;
- Cool, Dry, and Fan only HVAC modes;
- target temperature from 16 to 31 °C in 0.5 °C increments;
- Auto, Low, and High fan speeds;
- vertical swing off, automatic, or fixed at 90°, 85°, 45°, 25°, or 0°;
- restoration of the last known state after a Home Assistant restart.
The entity uses optimistic state tracking. A physical remote can change the air conditioner without Home Assistant being aware of the change.
Power-off uses a complete TCL112 packet with the Power bit cleared while preserving the last mode, temperature, fan speed, and swing position. The original 28-bit short command is retained in the protocol module for reference but is not used by the entity.
- Home Assistant 2026.3.0 or newer;
- a Tuya TS1201 IR blaster paired with ZHA;
- the ZHA TS1201 quirk must be active for the selected device.
- Open HACS → ⋮ → Custom repositories.
- Add
https://github.com/lukefx/parkair-ir-climatewith the category Integration. - Find and install ParkAir, then restart Home Assistant.
- Pair the Tuya TS1201 blaster with ZHA.
- Open Settings → Devices & services → Add integration, search for ParkAir, and select the TS1201 device.
- Pair the Tuya TS1201 blaster from Settings → Devices & services → ZHA →
Add device. Its device page must report the model as
TS1201. - Copy
custom_components/parkair_ir_climateinto Home Assistant's/config/custom_components/directory. - Restart Home Assistant.
- Open Settings → Devices & services → Add integration.
- Search for ParkAir and select the TS1201 blaster from the ZHA device list.
Home Assistant creates an entity similar to
climate.parkair_air_conditioner, compatible with the standard Thermostat
card.
When upgrading from the former MQTT version, replace all integration files and restart Home Assistant. Migration is automatic when exactly one TS1201 exists in ZHA. If ZHA contains no TS1201 or more than one, remove the old ParkAir configuration entry and add it again, selecting the correct device.
The entity calls zha.issue_zigbee_cluster_command locally using endpoint 1,
cluster 0xE004, and server command 0x02 (IRSend). The TS1201 quirk
bundled with ZHA handles the required exchange with the blaster.
Cool mode at 26 °C:
action: climate.set_temperature
target:
entity_id: climate.parkair_air_conditioner
data:
hvac_mode: cool
temperature: 26Fan-only mode:
action: climate.set_hvac_mode
target:
entity_id: climate.parkair_air_conditioner
data:
hvac_mode: fan_onlyDry mode:
action: climate.set_hvac_mode
target:
entity_id: climate.parkair_air_conditioner
data:
hvac_mode: dryLow fan speed:
action: climate.set_fan_mode
target:
entity_id: climate.parkair_air_conditioner
data:
fan_mode: lowAutomatic swing:
action: climate.set_swing_mode
target:
entity_id: climate.parkair_air_conditioner
data:
swing_mode: autoFixed 45° vertical position:
action: climate.set_swing_mode
target:
entity_id: climate.parkair_air_conditioner
data:
swing_mode: "45°"Power off:
action: climate.turn_off
target:
entity_id: climate.parkair_air_conditionerLong messages use the TCL112 protocol: 14 bytes transmitted least-significant bit first. The checksum is the sum of bytes 0 through 12 modulo 256. Timings and the original short power-off command were derived from captured remote-control samples. Pulse timings are compressed with FastLZ and Base64-encoded in the format accepted by Tuya IR blasters.
Byte 6 stores the HVAC mode (2 dry, 3 cool, 7 fan-only). In byte 8,
the three least-significant bits store fan speed (0 auto, 2 low, 5
high), and the next three bits store vertical swing (0 off, 1 90°, 2
85°, 3 45°, 4 25°, 5 0°, 7 automatic).
ParkAir is licensed under the Apache License 2.0.