This integration automatically discovers and creates climate entities for your HVAC devices, seamlessly linking them to your existing Tasmota devices.
- 🔍 Automatic Discovery - Detects MiElHVAC devices via MQTT automatically
- 🔗 Device Linking - Climate entities appear under your Tasmota devices
- 🌡️ Full Climate Control - Temperature, modes, fan speed, and swing control
- 🏠 Local Control - All communication via local MQTT (no cloud required)
- 🔄 State Persistence - Remembers settings after Home Assistant restarts
- 🌍 Multi-language - English and French UI translations included
- ⚡ Energy Monitoring - Real-time power (W) and cumulative energy (kWh)
- 🌬️ Extended Controls - Purifier, Night Mode, EconoCool, i-See Air Direction
- 🌡️ Remote Temperature - Send an external temperature sensor reading to the unit
- 📊 Capability Awareness - Exposes unit capabilities reported by the driver
↔️ Backward Compatible - Works with both legacy and new Tasmota MiElHVAC driver
- Off
- Auto
- Cool
- Dry
- Heat
- Fan Only
- Auto
- Quiet
- Speed 1–4
- Vertical: Auto, Up, Up-Middle, Center, Down-Middle, Down, Swing
- Horizontal: Auto, Left, Left-Middle, Center, Right-Middle, Right, Swing
- Range: 10°C – 31°C (may be narrowed by unit capabilities)
- Precision: 0.5°C steps
These features are exposed as state attributes and callable via Home Assistant services. They are only available when your Tasmota firmware reports the corresponding capability (cap_run_state=true):
| Feature | Attribute | Notes |
|---|---|---|
| Purifier | purifier |
on / off |
| Night Mode | night_mode |
on / off |
| EconoCool | econo_cool |
on / off — COOL mode only |
| i-See Air Direction | air_direction |
auto, swing, even, direct |
| Remote Temperature | remote_temperature |
Send external temp to unit (°C) |
| Attribute | Unit | Description |
|---|---|---|
power_usage_w |
W | Instantaneous power consumption |
energy_total_kwh |
kWh | Cumulative energy total |
| Attribute | Description |
|---|---|
swing_horizontal |
Current horizontal swing position |
outdoor_temperature |
Outdoor temperature reported by unit (if supported) |
capabilities |
Map of *Supported flags from the driver |
- ESP32 or ESP8266 device running Tasmota
- Mitsubishi Electric heat pump with CN105 connector
- JST PA 5-pin connector (2.0mm pitch) to interface with CN105
For complete hardware setup including wiring diagrams and CN105 pinout, see:
- Home Assistant 2023.1 or newer
- Tasmota firmware with MiElHVAC driver enabled
- Pre-compiled Tasmota32 firmware available at MiElHVAC Tasmota Display Driver
- Or compile your own using TasmoCompiler with
#define USE_MIEL_HVAC
- MQTT broker (e.g., Mosquitto) configured in Home Assistant
Note: This Home Assistant integration works with both ESP32 and ESP8266. The MiElHVAC Display Driver (Berry-based web UI) requires ESP32 only, but is optional.
This integration is compatible with all versions of the Tasmota MiElHVAC driver:
| Driver version | SENSOR field | HVACSETTINGS field | Supported |
|---|---|---|---|
| Pre-PR#24486 (legacy) | Temperature |
Temp |
✅ |
| Post-PR#24490 | RoomTemperature |
SetTemperature |
✅ |
| Post-PR#24517 | + RemoteTemperature |
— | ✅ |
| Post-PR#24660 | + OutdoorTemperature, energy, capabilities |
+ Purifier, NightMode, EconoCool |
✅ |
Your Tasmota device must:
-
Have MiElHVAC driver active
- The driver should publish HVAC data to
tele/{topic}/SENSOR
- The driver should publish HVAC data to
-
Be connected to your MQTT broker
- Same broker as Home Assistant
-
Have discovery enabled (recommended)
SetOption19 0 -
Have a configured Device Name
- Set in Tasmota: Configuration → Configure Other → Device Name
- Example: "Living Room AC" or "Bedroom HVAC"
- Open HACS in Home Assistant
- Click on Integrations
- Click the three dots menu (top right) → Custom repositories
- Add repository:
- URL:
https://github.com/aldweb/ha-tasmota-mielhvac - Category: Integration
- URL:
- Click Add
- Search for "Tasmota MiElHVAC" in HACS
- Click Download
- Restart Home Assistant
- Download the latest release from GitHub
- Extract the
tasmota_mielhvacfolder - Copy it to your Home Assistant
custom_componentsdirectory:config/ └── custom_components/ └── tasmota_mielhvac/ - Restart Home Assistant
- Go to Settings → Devices & Services
- Click + Add Integration
- Search for "Tasmota MiElHVAC"
- Click on it and follow the setup dialog
- Click Submit
That's it! No configuration needed - the integration will automatically discover your devices.
Check the logs to confirm your devices were discovered:
Settings → System → Logs
Look for messages like:
Discovered MiElHVAC device: tasmota_hvac (RoomTemp: 21.5°C) - Living Room AC
Go to Settings → Devices & Services → MQTT
Your Tasmota devices should now have a climate entity (HVAC) alongside their other entities.
Once discovered, you can control your HVAC through:
- Lovelace UI - Use the standard Thermostat card
- Home Assistant App - Full mobile control
- Automations - Create climate-based automations
- Voice Assistants - Control via Alexa, Google Assistant, etc.
Features like Purifier, Night Mode, EconoCool, Air Direction, and Remote Temperature are not yet exposed as native HA climate controls, but can be triggered via the mqtt.publish service or automations.
Send an external temperature reading to the HVAC unit (replaces the unit's built-in sensor):
service: mqtt.publish
data:
topic: cmnd/your_topic/HVACSetRemoteTemp
payload: "21.5"To clear the remote temperature and revert to the unit's own sensor:
service: mqtt.publish
data:
topic: cmnd/your_topic/HVACSetRemoteTempClearTime
payload: "0"service: mqtt.publish
data:
topic: cmnd/your_topic/HVACSetPurify
payload: "on"service: mqtt.publish
data:
topic: cmnd/your_topic/HVACSetNightMode
payload: "on"service: mqtt.publish
data:
topic: cmnd/your_topic/HVACSetEconoCool
payload: "on"service: mqtt.publish
data:
topic: cmnd/your_topic/HVACSetAirDirection
payload: "swing" # auto | swing | even | directservice: mqtt.publish
data:
topic: cmnd/your_topic/HVACSetSwingH
payload: "swing" # auto | left | left_middle | center | right_middle | right | swingautomation:
- alias: "Send remote temperature to HVAC"
trigger:
- platform: state
entity_id: sensor.living_room_temperature
action:
- service: mqtt.publish
data:
topic: cmnd/living_room_hvac/HVACSetRemoteTemp
payload: "{{ states('sensor.living_room_temperature') }}"automation:
- alias: "HVAC Night Mode"
trigger:
- platform: time
at: "22:30:00"
action:
- service: mqtt.publish
data:
topic: cmnd/bedroom_hvac/HVACSetNightMode
payload: "on"| Topic | Purpose |
|---|---|
tele/{topic}/SENSOR |
Room temp, outdoor temp, energy, capabilities |
tele/{topic}/HVACSETTINGS |
HVAC state (mode, target temp, fan, swing, run-state features) |
tele/{topic}/LWT |
Device availability (Online/Offline) |
tasmota/discovery/+/config |
Tasmota device discovery (for MAC and name) |
| Topic | Purpose | Example Payload |
|---|---|---|
cmnd/{topic}/HVACSetHAMode |
Set HVAC mode | heat, cool, auto, off |
cmnd/{topic}/HVACSetTemp |
Set target temperature | 22 |
cmnd/{topic}/HVACSetFanSpeed |
Set fan speed | auto, quiet, 1–4 |
cmnd/{topic}/HVACSetSwingV |
Set vertical swing | auto, up, center, down, swing |
cmnd/{topic}/HVACSetSwingH |
Set horizontal swing | auto, left, center, right, swing |
cmnd/{topic}/HVACSetRemoteTemp |
Send external temperature | 21.5 |
cmnd/{topic}/HVACSetRemoteTempClearTime |
Clear remote temp timeout | 0 |
cmnd/{topic}/HVACSetPurify |
Toggle purifier | on, off |
cmnd/{topic}/HVACSetNightMode |
Toggle night mode | on, off |
cmnd/{topic}/HVACSetEconoCool |
Toggle EconoCool | on, off |
cmnd/{topic}/HVACSetAirDirection |
Set i-See air direction | auto, swing, even, direct |
Note:
HVACSetRemoteTempandHVACSetRemoteTempClearTimereplace the legacyHVACRemoteTemp/HVACRemoteTempClearTimecommands from the pre-PR#24496 driver. The new driver (post-PR#24496) uses theHVACSet*prefix for all write commands.
Check these items:
-
MQTT Connection
- Verify Tasmota is connected to MQTT broker
- Check MQTT broker logs for messages from your device
-
MiElHVAC Data
- Use MQTT Explorer to check if
tele/{topic}/SENSORcontainsMiElHVACdata - The payload should include at least one of:
Temperature(legacy) orRoomTemperature(new driver)
- Use MQTT Explorer to check if
-
Home Assistant Logs
- Check for discovery messages or errors
- Look for "Discovered MiElHVAC device" or error messages
-
Tasmota Device Name
- Set a unique Device Name in Tasmota configuration
- Restart Tasmota after changing the name
Purifier, Night Mode, EconoCool and Air Direction require:
- A recent Tasmota build incorporating PR#24660 or later
- A unit that supports run-state control (
cap_run_state=truein thecapabilitiesattribute)
Check the capabilities attribute of your climate entity to see what your unit supports.
This usually happens if Tasmota discovery is disabled.
Solution:
In Tasmota console, run:
SetOption19 0
Restart 1
-
Check MQTT topics in logs
- Verify commands are being published
-
Test manually in Tasmota
- In Tasmota console, try:
HVACSetTemp 22 - If this doesn't work, the issue is with the Tasmota driver, not this integration
- In Tasmota console, try:
-
Verify device is online
- Check LWT status in MQTT Explorer:
tele/{topic}/LWTshould be "Online"
- Check LWT status in MQTT Explorer:
If you see duplicate climate entities:
- Remove all duplicate entities via UI
- Restart Home Assistant
- The integration will recreate them correctly
For an enhanced Tasmota web interface with interactive controls (temperature adjustment, mode/fan/swing selectors), check out the companion Berry driver:
MiElHVAC Tasmota Display Driver
This optional Berry script adds a full-featured web UI directly in your Tasmota interface. Note: Requires ESP32 (Berry scripting not available on ESP8266).
Device names come from Tasmota's "Device Name" setting. To customize:
- In Tasmota web UI: Configuration → Configure Other
- Set Device Name to your preferred name
- Restart Tasmota
- In Home Assistant, remove and recreate the integration
If your HVAC unit's built-in sensor is inaccurate (common when the unit is behind furniture or in a corner), you can feed it a more accurate external reading via an automation. The driver will use this value instead of its own sensor until the timeout expires.
automation:
- alias: "Sync external temperature to HVAC"
trigger:
- platform: state
entity_id: sensor.living_room_temp
action:
- service: mqtt.publish
data:
topic: cmnd/living_room_hvac/HVACSetRemoteTemp
payload: "{{ states('sensor.living_room_temp') }}"┌─────────────────┐
│ Tasmota Device │
│ (ESP + HVAC) │
└────────┬────────┘
│ MQTT
│
┌────────▼────────────────────┐
│ MQTT Broker │
│ (Mosquitto) │
└────────┬────────────────────┘
│
┌────┴────┐
│ │
┌───▼───┐ ┌──▼──────────────┐
│Tasmota│ │Tasmota MiElHVAC │
│Integr.│ │ Integration │
└───┬───┘ └──┬──────────────┘
│ │
└───┬────┘
│
┌───────▼──────────┐
│ Home Assistant │
│ Climate Entity │
└──────────────────┘
- Tasmota publishes device info to
tasmota/discovery/{MAC}/config - Integration caches device MAC address and name
- Tasmota publishes HVAC data to
tele/{topic}/SENSOR - Integration detects MiElHVAC data (any of the known field names)
- Climate entity is created and linked to Tasmota device via MAC address
- Entity appears under the Tasmota device in Home Assistant
Temperature Updates:
- Tasmota publishes current temp every TelePeriod (default 5 minutes)
- Integration updates Home Assistant immediately
Commands:
- User changes setting in Home Assistant
- Integration publishes MQTT command
- Tasmota sends command to HVAC
- Tasmota publishes new state
- Home Assistant updates entity
The integration handles both legacy and new driver payload formats transparently. Field name changes introduced by the Tasmota driver between 2024 and 2026 are resolved using fallback lookups:
| Old field | New field | Where |
|---|---|---|
Temperature |
RoomTemperature |
SENSOR |
Power (string) |
PowerState |
SENSOR |
Temp |
SetTemperature |
HVACSETTINGS |
HVACRemoteTemp |
HVACSetRemoteTemp |
Command |
HVACRemoteTempClearTime |
HVACSetRemoteTempClearTime |
Command |
No configuration change is needed when upgrading your Tasmota firmware.
- Installation Guide - Detailed setup instructions
- Technical Documentation - Architecture details
- Examples - MQTT examples and testing
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Home Assistant Community: Forum Thread
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
- MiElHVAC Tasmota Display Driver - Berry script for web UI controls and display
- Home Assistant - Open source home automation
- Tasmota - ESP firmware with MiElHVAC driver
- SwiCago - Original Mitsubishi protocol reverse engineering
- Created by @aldweb
- Inspired by the Tasmota and Home Assistant communities
Driver compatibility updated to cover all Tasmota MiElHVAC driver changes merged between February and April 2026 (PRs #24486, #24488, #24490, #24496, #24517, #24660). Full backward compatibility with the pre-PR#24486 driver is maintained.
New features:
- Energy monitoring:
power_usage_wandenergy_total_kwhstate attributes (PR#24486) - Extended run-state controls: Purifier, Night Mode, EconoCool, i-See Air Direction (PR#24660)
- Remote temperature: send an external sensor reading to the HVAC unit (PR#24517)
- Outdoor temperature attribute (PR#24517 / #24660)
- Unit capabilities exposed as
capabilitiesattribute (PR#24660)
Breaking changes in Tasmota driver (handled transparently by this integration):
HVACSETTINGS.Temprenamed toHVACSETTINGS.SetTemperature(PR#24490)SENSOR.MiElHVAC.Temperaturerenamed toSENSOR.MiElHVAC.RoomTemperature(PR#24490)SENSOR.MiElHVAC.Power(string) renamed toSENSOR.MiElHVAC.PowerState(PR#24490)HVACRemoteTempcommand renamed toHVACSetRemoteTemp(PR#24496)HVACRemoteTempClearTimerenamed toHVACSetRemoteTempClearTime(PR#24496)
- Initial public release
- Automatic device discovery via Tasmota MQTT discovery
- Full climate control support
- Device linking to existing Tasmota devices
- Multi-language UI (English, French)
- HACS compatible
Enjoy your automated climate control! 🌡️❄️🔥
