ESPHome custom climate component for Voltas Inverter Split AC using the RG52E1/BGEF IR remote. Controls your Voltas AC from Home Assistant via an ESP32 with an IR LED — no cloud, fully local.
Works with Voltas split ACs that use the RG52E1/BGEF remote. May also work with other Voltas models using the same remote protocol.
- 🌡️ Temperature Control: 17–30°C with 1° steps
- ❄️ Modes: Cool, Heat, Dry, Fan Only, Auto
- 💨 Fan Speed: Auto, Low, Medium, High
- 🔄 Swing: Vertical On/Off
- 💡 LED Display: On/Off toggle
- 📡 Dynamic Protocol: IR signals generated on-the-fly — all parameters (temp, mode, fan) are sent together in every command, so changing one never resets another
- 🏠 Fully Local: No cloud dependencies, works entirely on your LAN
voltas/
├── README.md
├── .gitignore
├── ACvoltas.txt # Captured raw IR signals (reference)
├── voltas.ino # Arduino Uno test sketch
└── esphome/
├── voltas_ac.yaml # ESPHome configuration
├── secrets.yaml.example # Template for credentials
└── custom_components/
└── voltas_ac/
├── __init__.py # Component registration
├── climate.py # Climate platform definition
└── voltas_ac.h # Dynamic IR signal generator
| Part | Purpose |
|---|---|
| ESP32 DevKit | Main controller |
| IR LED (940nm) | Transmits IR signals |
| PN2222A / 2N2222 NPN transistor | Drives IR LED for range |
| 1.5kΩ resistor | Base current limiter |
3.3V
│
IR LED (+)
│
IR LED (-)
│
Collector (C)
│
ESP32 GPIO4 ──[1.5kΩ]── Base (B) ← PN2222A
│
Emitter (E)
│
GND
E B C
config/
├── voltas-ac.yaml
└── custom_components/
└── voltas_ac/
├── __init__.py
├── climate.py
└── voltas_ac.h
Copy the template and fill in your credentials:
cp secrets.yaml.example secrets.yamlEdit secrets.yaml:
wifi_ssid: "YourWiFiName"
wifi_password: "YourWiFiPassword"
api_key: "your-base64-api-key"
ota_password: "your-ota-password"
ap_password: "fallback-hotspot-password"Note:
secrets.yamlis gitignored and must never be committed.
esphome run voltas-ac.yamlThe device auto-discovers via the ESPHome integration.
| Entity | Type | Controls |
|---|---|---|
| Voltas AC | Climate | Temperature, Mode, Fan, Swing |
| AC Display | Switch | LED display on/off |
| Status | Binary Sensor | Online/offline |
| WiFi Signal | Sensor | Signal strength |
| Uptime | Sensor | Device uptime |
| Restart | Button | Reboot device |
The Voltas remote sends a 6-byte frame with 38kHz carrier:
[B2] [4D] [fan_byte] [~fan_byte] [temp_mode] [~temp_mode]
| Field | Encoding |
|---|---|
| Bytes 0-1 | 0xB2 0x4D — Device ID (constant) |
| Byte 2 | Fan speed: BF=Auto, 9F=Low, 5F=Med, 3F=High |
| Byte 3 | Bitwise complement of Byte 2 |
| Byte 4 | (temp_code << 4) | mode_nibble |
| Byte 5 | Bitwise complement of Byte 4 |
Temperature uses a Gray-code-like lookup (offset from 17°C).
Mode nibbles: 0=Cool, 4=Dry, 8=Auto, C=Heat.
The voltas.ino sketch provides a serial command interface (115200 baud) for testing with an Arduino Uno + IR LED on pin 4:
POWER_ON / POWER_OFF TEMP <17-30> / TEMP_UP / TEMP_DOWN
MODE <COOL|DRY|HEAT|FAN|AUTO> FAN <AUTO|LOW|MED|HIGH>
SWING_ON / SWING_OFF LED_ON / LED_OFF
STATUS / HELP
Note: The Arduino sketch uses static signal arrays (pre-decoded protocol). For production use, prefer the ESPHome component which generates signals dynamically.
MIT License — Use freely, just keep the credit.