Also still stuck…
Hi!
I can’t pair my princess calefactor to Homewizard app (android), on step when I have to connect my phone to HeaterSetup wifi… that wifi doesn’t appear on my phone… Any idea?
My password is from here.
How could you pair it with the Homeclimate app? I can’t because the wifi name doesn’t appear on my phone
This integration has nothing to do with the app. This is for control within home assistant.
But the integration ask me for username and password. I don’t understand ![]()
Did you register here initially? If you’re having problems with the Homewizard app, that’s a Homewizard issue, not HA.
Yes, I have account there, but can’t see my climate device there ![]()
Hi, I have one of these heaters and going through the steps to try to get local control.
My HA runs in proxmox and my Mosquitto broker is version 2.x so I decided the easiest way to get a 1.6.x version is to have a standalone LXC container instance. However I’m struggling to get Mosquitto 1.6.x installed on a Debian LXC. The built in package repository only has 2.x versions, so I downloaded a .deb package which then told me it has a number of dependencies that I can’t resolve as those are not available in the repositories.
How are people managing to install 1.6.x versions of Mosquitto?
Did you have any luck?
I have 2 Princess heaters that was already installed on a second home that we bought last spring. As I first step I have tried to connect them to Wifi using the app called Homewizard/Climate on my iPhone. But I have failed, the last try I did was yesterday.
Today being back home - I asked a question in another forum about this, and based on the replies I have made the reflection that maybe I have used the wrong app. There seem to be another app called “Princess Home”. Maybe this “Princess Home” is their old app (supporting) some old heaters, while Homewizard is their new app…
Anyway - on the next visit to our other home, I will try using the “Princess Home” app instead of Homewizard…
Yeah, using Tuya app works great ![]()
I couldn’t get mine to connect to the homewizard app to do the initial setup, so I tried the Princess app which worked and got me connected. I then managed to do DNS redirects, block internet access etc and started getting MQTT messages to my docker mosquitto-1.6.12 broker.
Everything was looking good, until I tried to use the heater today and I’m not seeing any messages over MQTT, so used Wireshark to sniff packets which shows me that it’s trying to connect to m2.tuyaeu.com and a3.tuyaeu.com. It’s unable to reach these due to the device being blocked from the internet, but having redirected their DNS queries to my MQTT broker nothing is coming through.
I’m confused as to how the device suddenly changed the addresses through which it’s trying to connect. I can only assume it managed to download a firmware update in the short time I had it accessible to the internet for initial setup, and that update was then applied next time I restarted the heater.
I created new SSL certificates with *.tuyaeu.com as the FQDN in the hope that this would allow it to start communicating with the broker but no change. I’m starting to think I might have to give up on MQTT control on this device and investigate the Tuya integration instead.
Urgh that is unfortunate, mine is still working with local MQTT control! Never had it connected to the internet.
After a significant battle to extract the local key required to get it working with Tuya local integration, I now have local control. However I’m far less confident of its reliability given the potential for the key to change (which requires a further extraction via the Tuya IoT cloud). Those of you with MQTT access, keep your devices off the internet!
I now have two Princess panel heaters connected to the (“old”?) Princess Home app. Can you share info on how you got them into HA using the Tuya local integration?
I did not manage to Link the App Account in Tuya Dev Platform - nothing happened when I scanned the QR code provided, using the Princess Home app, the QR codes just times out. I have tried using the Central & Western European Data centers…
I paired the heater to the Tuya Smart app, which allowed me to control the heater just like the Princess app. I think you need thr Tuya app rather than the princess app for the process to work. I then followed the standard instructions posted elsewhere to extract the local key via Tuya API. I will forewarn that it’s a very tedious process!
So. A year later. I would like to add that I opened up a Princess Smart Panel heater, (the one mentioned initially) And found out that it has an ESP32-WROOM-32D chip for the wifi functionality and wouldn’t you have it; it’s flashable. The control board even comes with an interface to just plug in some jumper cables. So I used my old arduino Uno as an uart controller and (after backing up the original firmware) flashed esphome on it. Then added the tuya MCU component to it.
So, no problems with encypted messaging to some cloud provider. On screen controls still work as they are not initially controlled by the esp.
I pasted my config below, it’s not perfect yet and doesn’t have all of the controls in the climate entity yet, but it works perfectly fine and locally now ![]()
I’m going to try this with my princess mobile airconditioner next.
Hopefully someone also gets some use out of this.
# ============================================
# Tuya MCU Serial Communication
# ============================================
tuya:
id: tuya_mcu
# Optional: ignore problematic datapoints during debugging
# ignore_mcu_update_on_datapoints: [27]
uart:
- id: my_uart
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 9600
# ============================================
# Climate Control
# ============================================
# Climate Control
climate:
- platform: tuya
name: "Princess Heater"
switch_datapoint: 1 # DP1 = ON/OFF ✅
target_temperature_datapoint: 3 # DP3 = Target Temp (was showing 23, 24)
current_temperature_datapoint: 4 # DP4 = Current Temp (16, 17°C) ✅
supports_heat: true
visual:
max_temperature: 25°C
min_temperature: 5°C
temperature_step: 1°C
active_state:
datapoint: 1
heating_value: 1
icon: "mdi:heat-wave"
# Add fan mode for high/low heat level (DP7)
fan_mode:
datapoint: 7
low_value: 1 # Low heat
high_value: 0 # High heat
# Debug sensors
sensor:
- platform: tuya
name: "Current Temperature"
sensor_datapoint: 3
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 0
- platform: tuya
name: "Target Temperature"
sensor_datapoint: 4
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 0
- platform: tuya
name: "High Mode Status"
sensor_datapoint: 7
accuracy_decimals: 0
disabled_by_default: false
entity_category: diagnostic
# Switches for control
switch:
- platform: tuya
name: "Main Switch"
switch_datapoint: 1
- platform: tuya
name: "ECO Mode"
switch_datapoint: 7
internal: true
restore_mode: ALWAYS_OFF
inverted: false
Great news! I’ve been putting this off for months! But that gives me the courage to do it too.
So the internals are controlled over ESP → UART.
Awesome! a1ad, I just updated the yaml ^ to include fanmode to set the high/low setting on the heater as well. I still need to get the timer working, but I don’t really use that.
And the network connectivity light is off at the moment which also seems like a fun addition to have
Nice! got it running!
This is the working config for my heater:
esphome:
name: name
comment: "Comments"
# The original HomeWizard firmware starts with a heartbeat, WIFI_STATE=0x02,
# command 0x51, and a DATAPOINT_QUERY. The MCU does not answer PRODUCT_QUERY.
on_boot:
- uart.write:
id: my_uart
data: [0x55, 0xAA, 0x00, 0x00, 0x00, 0x00, 0xFF]
- delay: 50ms
- uart.write:
id: my_uart
data: [0x55, 0xAA, 0x00, 0x03, 0x00, 0x01, 0x02, 0x05]
- delay: 150ms
- uart.write:
id: my_uart
data: [0x55, 0xAA, 0x00, 0x51, 0x00, 0x00, 0x50]
- delay: 10ms
- uart.write:
id: my_uart
data: [0x55, 0xAA, 0x00, 0x08, 0x00, 0x00, 0x07]
- delay: 5s
- repeat:
count: 5
then:
- uart.write:
id: my_uart
data: [0x55, 0xAA, 0x00, 0x08, 0x00, 0x00, 0x07]
- delay: 3s
esp32:
board: esp32dev
framework:
type: esp-idf # or arduino, both work
flash_size: 16MB
wifi:
ssid: "IoT"
password: "******"
ap:
ssid: "Fallback Hotspot"
password: "********"
power_save_mode: none
reboot_timeout: 0s
# The original firmware reports 0x03 after the station receives an IP address.
on_connect:
- uart.write:
id: my_uart
data: [0x55, 0xAA, 0x00, 0x03, 0x00, 0x01, 0x03, 0x06]
on_disconnect:
- uart.write:
id: my_uart
data: [0x55, 0xAA, 0x00, 0x03, 0x00, 0x01, 0x02, 0x05]
logger:
#level: VERBOSE
#logs:
# component: VERBOSE
# tuya: VERBOSE
# tuya.climate: VERBOSE
# tuya.sensor: VERBOSE
api:
encryption:
key: "**********************************"
captive_portal:
# MCU quirk: the heating element only starts once DP7 (fan) is rewritten
# when real heat demand occurs (Action -> HEATING). This interval detects
# that transition (turning on with heat demand, or sliding the target up
# until target > current while already on) and rewrites DP7 once.
globals:
- id: heater_kick_done
type: bool
restore_value: no
initial_value: 'false'
interval:
- interval: 1s
then:
- lambda: |-
if (id(princess_heater).action == CLIMATE_ACTION_HEATING) {
if (!id(heater_kick_done)) {
auto fan = id(princess_heater).fan_mode;
if (fan.has_value()) {
// force_: bypasses ESPHome's "not sending unchanged value" skip.
// The MCU only starts the element on an actual DP7 write.
uint8_t dp7 = (*fan == ClimateFanMode::CLIMATE_FAN_HIGH) ? 0 : 1;
id(tuya_mcu).force_set_enum_datapoint_value(7, dp7);
id(heater_kick_done) = true;
}
}
} else {
id(heater_kick_done) = false;
}
# ============================================
# Tuya MCU Serial Communication
# ============================================
tuya:
id: tuya_mcu
# Optional: ignore problematic datapoints during debugging
# ignore_mcu_update_on_datapoints: [27]
uart:
- id: my_uart
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 9600
# ============================================
# Climate Control
# ============================================
# Climate Control
climate:
- platform: tuya
id: princess_heater
name: "Princess Heater"
switch_datapoint: 1 # DP1 = ON/OFF
target_temperature_datapoint: 3 # DP3 = Target Temp
current_temperature_datapoint: 4 # DP4 = Current Temp
supports_heat: true
visual:
max_temperature: 28°C
min_temperature: 5°C
temperature_step: 1°C
icon: "mdi:heat-wave"
# Fan mode for high/low heat level (DP7)
fan_mode:
datapoint: 7
low_value: 1 # Low heat
high_value: 0 # High heat
# Debug sensors
sensor:
- platform: tuya
name: "Target Temperature"
sensor_datapoint: 3
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 0
- platform: tuya
name: "Current Temperature"
sensor_datapoint: 4
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 0
switch:
- platform: template
name: "Heater Power"
id: heater_power_switch
icon: "mdi:radiator"
lambda: |-
return id(princess_heater).mode == ClimateMode::CLIMATE_MODE_HEAT;
turn_on_action:
- lambda: |-
id(princess_heater).make_call()
.set_mode(ClimateMode::CLIMATE_MODE_HEAT)
.perform();
turn_off_action:
- lambda: |-
id(princess_heater).make_call()
.set_mode(ClimateMode::CLIMATE_MODE_OFF)
.perform();
- platform: template
name: "Heater Power Level"
id: heater_power_level_switch
icon: "mdi:fire"
lambda: |-
return id(princess_heater).fan_mode == ClimateFanMode::CLIMATE_FAN_HIGH;
turn_on_action:
- lambda: |-
id(princess_heater).make_call()
.set_fan_mode(ClimateFanMode::CLIMATE_FAN_HIGH)
.perform();
turn_off_action:
- lambda: |-
id(princess_heater).make_call()
.set_fan_mode(ClimateFanMode::CLIMATE_FAN_LOW)
.perform();
- platform: tuya
name: "Child Lock"
switch_datapoint: 2
icon: "mdi:lock"
entity_category: config
ota:
- platform: esphome
id: ota_vuurtje_badkamer
password: *******
Me == happy
edit: after analyzing the firmware dump now with working network connectivity light and startup flow. (thanks to Ai)
@holmly relevant network connectivity: