Transform your Midea/OEM heat pump hot water system into a smart, Home Assistant-controlled water heater entity!
This integration creates a fully functional water heater entity in Home Assistant that can:
- ✅ Profile System: Load from pre-configured profiles or save your own for easy setup and sharing
- ✅ UI Configuration: Configure entirely through the Home Assistant UI - no YAML required!
- ✅ Mode-Specific Temperature Limits: Enforces different min/max temperatures per operation mode
- ✅ Control operation modes: Off, Eco, Performance (Hybrid), Electric (E-Heater)
- ✅ Set target temperature via direct Modbus with automatic range enforcement
- ✅ Monitor real-time temperature with configurable scaling
- ✅ Track multiple sensors: Tank, outdoor, condensor temperatures and more
- ✅ Multiple device support: Configure multiple water heaters with unique entities
- ✅ Integrate seamlessly with automations, dashboards, and Lovelace cards
- ✅ Follow HA standards using proper water_heater domain
- Profile-based setup - Quick configuration using pre-defined or custom profiles
- Native water_heater entity (not climate hack!)
- UI-based configuration with step-by-step setup wizard
- Mode-specific temperature limits (prevent Modbus errors from invalid temperatures)
- Coordinated Modbus polling - 90% reduction in network traffic!
- Built-in Modbus client (no external modbus dependency!)
- Self-contained integration - everything configured through UI
- Profile export/import - Share configurations with the community
- Real-time temperature monitoring with configurable scaling
- Direct register control for all functions
- Automatic polling with configurable scan intervals
This integration is primarily developed for the Chromagen Midea 170L Heat Pump (Model: HP170 / RSJ-15/190RDN3-C), but the highly configurable nature makes it compatible with:
- Other OEM-branded Midea units (many manufacturers rebrand Midea heat pumps)
- Similar Modbus-controllable hot water systems
- Different capacity Midea models (200L, 300L, etc.)
- Other heat pump water heaters with Modbus RTU over TCP support
The integration's flexible configuration and profile system allows you to:
- Load pre-configured profiles for known models
- Adjust all register addresses
- Configure temperature scaling and offsets
- Customize operation mode values
- Set mode-specific temperature limits
- Enable/disable sensors as needed
- Save and share your configuration as a profile
This means if your hot water system uses Modbus communication, you can likely adapt this integration to work with it!
-
Add custom repository:
- HACS → Integrations → ⋮ → Custom repositories
- Repository:
https://github.com/0xAHA/Midea-Heat-Pump-HA.git - Category: Integration
-
Install:
- Search for "Midea Heatpump HWS"
- Click Download
- Restart Home Assistant
- Download the latest release from here
- Extract to
/config/custom_components/midea_heatpump_hws/ - Restart Home Assistant
The integration now includes a profile system for quick and easy configuration:
-
Add Integration:
- Settings → Devices & Services → Add Integration
- Search for "Midea Heatpump HWS"
-
Choose Setup Method:
- Select "Load from Profile" for quick setup
- Select "Manual Configuration" for custom setup
-
If using Profile:
- Choose from available profiles (e.g., "Midea 170L Heat Pump")
- Enter your device's IP address
- Enter a friendly name
- Done! All registers and settings are pre-configured
If choosing manual setup or your model isn't in the profiles:
-
Step 1: Connection Settings
- Host: IP address of your RS485-WiFi adapter
- Port: Modbus TCP port (usually 502)
- Modbus Unit: Device ID (usually 1)
- Scan Interval: How often to poll (60-300 seconds)
-
Step 2: Control Registers
- Power Register (default: 0)
- Mode Register (default: 1)
- Mode Values (Eco=1, Performance=2, Electric=4)
-
Step 3: Temperature Registers
- Current Temperature Register (default: 102)
- Target Temperature Register (default: 2)
- Individual scaling options for each
-
Step 4: Temperature Limits by Mode
- Eco Mode: 60-65°C (default)
- Performance Mode: 60-70°C (default)
- Electric Mode: 60-70°C (default)
-
Step 5: Optional Sensors
- Configure additional temperature sensors
- Shared scaling for sensor group
-
Step 6: Entity Settings
- Friendly name
- Default target temperature
-
Step 7: Save as Profile (Optional)
- Save your configuration for future use
- Share with the community
Access all settings without removing the integration:
- Settings → Devices & Services → Midea Heatpump HWS → Configure
- Options include:
- Connection Settings
- Control Registers
- Temperature Registers
- Temperature Limits
- Sensors
- Entity Settings
- Save as Profile - Save current configuration
Share your working configuration with others:
-
Via Service Call:
service: midea_heatpump_hws.export_profile data: name: "My 170L Config" model: "HP170"
-
Via Developer Tools:
- Developer Tools → Services
- Select
midea_heatpump_hws.export_profile - Enter optional name and model
- Call Service
- Right-click the download link in the notification to save
-
Via Configuration Menu:
- Settings → Devices & Services → Your Device → Configure
- Select "Save as Profile"
- Enter profile name and model
- Profile saved for future use
Profiles are JSON files containing all configuration:
- Register addresses
- Scaling factors
- Temperature limits
- Mode values
- Default settings
Example profile location:
- Built-in:
/custom_components/midea_heatpump_hws/models/defaults/ - Custom:
/custom_components/midea_heatpump_hws/models/custom/
Exported profiles can be:
- Shared on GitHub issues for others with the same model
- Kept as configuration backups
- Used for quick setup of multiple units
| Mode | Description | Midea Equivalent | Modbus Value | Temp Range* |
|---|---|---|---|---|
| off | Water heater disabled | Off | - | - |
| eco | Energy efficient heating | Economy mode | 1 | 60-65°C |
| performance | High performance heating | Hybrid mode | 2 | 60-70°C |
| electric | Electric heating | E-heater mode | 4 | 60-70°C |
*Temperature ranges are configurable per mode during setup
| Function | Register | Description | Scaling |
|---|---|---|---|
| Power State | 0 | On/Off control | None |
| Operation Mode | 1 | Current mode | None |
| Target Temperature | 2 | Set point | Configurable |
| Tank Top Temp | 101 | T5U sensor | Configurable |
| Tank Bottom Temp | 102 | T5L sensor | Configurable |
| Condensor Temp | 103 | T3 sensor | Configurable |
| Outdoor Temp | 104 | T4 sensor | Configurable |
| Exhaust Gas Temp | 105 | Tp sensor | No scaling |
| Suction Temp | 106 | Th sensor | Configurable |
Note: Your heat pump model may use different registers. Use the configuration UI to adjust as needed, then save as a custom profile.
type: tile
entity: water_heater.hot_water_system_192_168_1_80
features:
- type: target-temperature
- type: water-heater-operation-modes
operation_modes:
- "off"
- "eco"
- "performance"
- "electric"type: vertical-stack
cards:
- type: tile
entity: water_heater.hot_water_system_192_168_1_80
name: Main House
- type: tile
entity: water_heater.hot_water_system_192_168_1_81
name: Guest Houseautomation:
- alias: "Heat pump eco mode at night"
trigger:
- platform: time
at: "22:00:00"
action:
- service: water_heater.set_operation_mode
target:
entity_id: water_heater.hot_water_system_192_168_1_80
data:
operation_mode: "eco"automation:
- alias: "Boost heating when temperature low"
trigger:
- platform: numeric_state
entity_id: water_heater.hot_water_system_192_168_1_80
attribute: current_temperature
below: 45
action:
- service: water_heater.set_operation_mode
target:
entity_id: water_heater.hot_water_system_192_168_1_80
data:
operation_mode: "performance"- Pre-configured profiles for common models (170L, 200L)
- Load from profile option during initial setup for quick configuration
- Save as profile option to save your working configuration
- Export profiles via service call for sharing with community
- Import profiles to add community-shared configurations
- Unique entity naming includes device IP for clarity
- Support multiple water heaters on the same network
- No entity conflicts when adding multiple devices
midea_heatpump_hws.export_profile- Export configuration to shareable JSONmidea_heatpump_hws.import_profile- Import shared profiles
- Mode-specific temperature limits
- Enhanced 6-step configuration flow
- Immediate UI updates after commands
- Better error handling and validation
| Issue | Solution |
|---|---|
Entity shows as unavailable |
Check modbus host IP and network connectivity |
| Target temperature not changing | Verify register addresses match your model |
| Temperature rejected (Modbus error) | Check mode-specific temperature limits |
| Modes not switching | Check mode register values and power register |
| Connection timeouts | Increase scan interval in configuration |
| Wrong temperature values | Adjust temperature offset and scale in config |
| Multiple devices conflict | Each device needs unique IP address |
If you have a HWS system that uses different modbus registers:
- Configure manually (don't use a profile)
- Test and adjust register addresses as needed
- Once working, save as a custom profile
- Export and share your profile on GitHub!
Add to configuration.yaml:
logger:
default: info
logs:
custom_components.midea_heatpump_hws: debug
custom_components.midea_heatpump_hws.coordinator: debugBased on the excellent work of:
- dgomes - Original Generic Water Heater
- ill_hey - Original HA Community post and hardware instructions
- BrittonA - Initial Modbus YAML configuration
Source threads:
- Built-in Modbus integration ✅ Completed in v0.1.0
- Configuration UI ✅ Completed in v0.2.0
- Coordinated polling ✅ Completed in v0.2.1
- Mode-specific temperature limits ✅ Completed in v0.2.2
- Profile system ✅ Completed in v0.2.3
- Multiple device support ✅ Completed in v0.2.3
- Community profile library (shared configurations)
- Enhanced diagnostics (connection status, detailed error reporting)
- Energy monitoring (power consumption tracking)
- Advanced scheduling (built-in time/temperature profiles)
If you have a working configuration for a different model:
- Export your profile using the service
- Create a GitHub issue with your profile attached
- Include your water heater model and any notes
- Help others with the same model!
- 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.
If this integration helped you, please:
- ⭐ Star this repository
- 🐛 Report any issues
- 💡 Suggest improvements
- 📤 Share your device profile
- 📢 Share with the community
Happy heating! 🔥