Brand: Kentatsu
Model: KSGB26HFAN1
Market: RU
Brand: Comfee
Model: MPPH-08CRN7
Market: DE
Brand: Pioneer
Model: CB018GMFILCFHD
Market: US
Requires “Pioneer Smart-WiFi Wired Wall Thermostat Kit for CYB, UYB, and RYB systems”, TST-LCACWIFIKP
, which appears to be the Midea WF-60A1
. I used the smartlight.me module, but had to trim the “USB” connector on the module and cut away a significant part of the housing to get everything to fit.
Brand: Bosch
Model: Climate 2000 - CL2000 35 E (indoor unit) / CL2000U W 35 E (outdoor unit)
Market: IT
There is no doubt my unit is a classic Midea, 2023/24 design with Info displayed via LED on the cover of the indoor unit and with the white, long remote controller with orange back-light.
Just today, arrived the SMARTLIGHT SLWF-01pro (v.2.1) that i order from Aliexpress with a proper cable. The setup was pretty straight forward, after giving the IoT Wifi to the stick, and setup a static IP, i quickly download the docker version of HA on my unRAID NAS, quick setup, add a new device, selected ESP Home and done.
It works pretty well. But, i was expecting to see more function compared to the remote, i was thinking that having a basic model, just mean that some function could be not visible on the remote but working or available on the mini split, because i noticed that the mainboard are almost all the same between models.
For example, i don’t see the humidity sensor, i don’t see the power draw, i can’t use the Boost/ECO mode.
But maybe, there is something from with my HA setup. I would try more setup in future.
I was mostly curious to see if my mini split was compatible too with the ESP Home key.
Brand: Ballu Discovery
Model: BSVI-09HN8
Market: RU
Year: 2024
Just wanted to confirm this is also working with my Samsung 3.5kW aircon-unit.
Brand: Samsung
Model: AR12TXHQASIXEU (AR35 12000 BTU)
Year: 2022
Market: EU
Using the ESPhome controller USB wifi adapter - SLWF-01pro (v.2.10)(Air conditioner Wi-Fi module for Midea, Idea, Neoclima, Electrolux, Beko and many more. Model SMARTLIGHT SLWF-01pro (v.2.1))
I didn’t manage to get the toggle buttons working (Display Toggle & Swing Step). Also the following sensors are not available/showing:
- Indoor Humidity
- Power Usage
- Uptime Days
Even shows the WiFi symbol:
Hey, i also would like to get some more photos or atleast instructions as how to open up the unit. I tried removing all the screws i could see but was still not able to open it up.
@redpersian Did you ever get a reply or figure it out on your own?
Edit: i found a diffrent post from him in another thread with pictures and a guy describing how to open the Midea Real Cool 35.
Take off all visible screws of the AC unit and then pull on the back. its held in by clips and they are strong, takes a bit of force to remove. Then the Rest is pretty easy. The USB is near the top of the front, roughly where the midea logo is. i just tilted the front a bit and switched the usb sticks.
Manufacturer: Midea Comfee
Model: Eco Friendly Pro
Year: 2019 (PCB date 2018)
Market: EU
A monoblock mobile unit that comes without WiFi.
It doesn’t have the pseudo USB, but a 4-pin JST XH 2.54 connector on the display PCB:
It is not necessary to get the display PCB out. The Wifi connector is accessible after removing the rear housing of the unit. It might be hidden under a grey foam sticker.
Manufacturer: Mirage
Model: InverterX EMC181J
Year: 2024
Market: US/MX
Manufacturer: Kaisai
Model: Eco
Year: probably 2020
Market: EU
Outdoor unit: KEX-12KTCO
Indoor unit: KEX-12KTCI
Everything works except indoor humidity and power usage.
Brand: Samsung
Model: AR09TXHQASIN
Year: 2022
Market: RU
using esp8266 esp12f (“hw580b” board)
reports outdoor temp
Brand: hOmeLabs
Model: HME030356N
Year: 2022
Market: US
using esp8266 esp12f (“smartlight” board)
reports outdoor temp
- Unit did not have USB port, only JST Headers. used dupont cables soldered to smartlight board
Brand: Alliance
Model: FOUSI12
Year: 2018
Market: South Africa
Using SLWF-01pro by SMLIGHT, purchased from AliExpress
Unit does not have “USB” port, but a JST-XH 4 pin header
Successfully controlling following AC:
Brand: PITSOS
Model: NEFELI PSO09VW30
Year: 2022
Market: Greece / Cyprus
Used EPS01-1S as shown in previous posts.
Hi, Sorry I haven’t logged on to forums in a while. I used an esp8266 12f and a regulator to utilize the space they left for their module. as far the code is concerned, here is what I used for the pins.
logger:
baud_rate: 0
uart:
tx_pin: 1
rx_pin: 3
baud_rate: 9600
## IR part:
- platform: template
name: AC Display Toggle IR
id: ac_display_toggle
on_press:
- remote_transmitter.transmit_toshiba_ac:
rc_code_1: 0xB54AF50AA55A
it works well, just let me know if you need full yaml config.
台灣三洋速捷淨
Brand: SANLUX
Model: SAE-V41HJ
Year: 2024
Market: TW
Note: No power and humidity information
Works even without 5v-3.3v level shifter (ESP32 / ESP32c3 tested)
This PCB is also used on Ariston Prios 80 Trial XD0. I will come back with an update.
Can I ask how you put a switch to enable and disable follow me?
I tried with the display setting but every time it always goes back to “OFF” and the log shows [W][component:237]: Component web_server took a long time for an operation (189 ms)"
and “[W][component:238]: Components should block for at most 30 ms” every time I press it.
Another question:
How did you implement “Prevent direct blowing” ?
The esphome wiki does not have the IR code for this feature, and I have no idea what it could be.
- I use template switch and remember and restore switch state
- I recorded some functions on the infrared remote control. The functions provided by each air conditioner will be different.
Below is a snippet of my air conditioner settings for your reference
substitutions:
device_name: air-conditioner
friendly_name: "air conditioner"
model_name: "SAE-V41HJ"
min_outdoor_temperature: "-20"
max_outdoor_temperature: "80"
follow_me_temperature_sensor: "sensor.temperature_humidity_sensor_67c2_temperature"
min_photoresistor_threshold: "0"
max_photoresistor_threshold: "1000000"
default_display_photoresistor_threshold: "14000"
packages:
base: !include base.yaml
board: !include board/xiao_esp32c3.yaml
esphome:
comment: SANLUX $model_name
remote_transmitter:
pin:
number: GPIO7
carrier_duty_percent: 50%
climate:
- platform: midea
id: midea_climate
name: Climate
period: 1s
timeout: 2s
num_attempts: 3
autoconf: true
beeper: true
visual:
min_temperature: 16 °C
max_temperature: 30 °C
temperature_step: 1 °C
supported_modes:
- FAN_ONLY
- HEAT_COOL
- COOL
- HEAT
- DRY
custom_fan_modes:
- SILENT
- TURBO
supported_presets:
- ECO
- BOOST
- SLEEP
supported_swing_modes:
- VERTICAL
- HORIZONTAL
- BOTH
outdoor_temperature:
name: "Outdoor Temperature"
filters:
- lambda: |-
if (!isnan(x) && x >= $min_outdoor_temperature && x <= $max_outdoor_temperature) {
return x;
}
return NAN;
switch:
- platform: template
name: Beeper
icon: mdi:volume-source
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
turn_on_action:
midea_ac.beeper_on:
turn_off_action:
midea_ac.beeper_off:
- platform: template
name: "Display Switch"
id: display_switch
turn_on_action:
if:
condition:
and:
- lambda: return id(midea_climate).mode != CLIMATE_MODE_OFF;
- switch.is_off: display_switch
then:
midea_ac.display_toggle:
turn_off_action:
if:
condition:
and:
- lambda: return id(midea_climate).mode != CLIMATE_MODE_OFF;
- switch.is_on: display_switch
then:
midea_ac.display_toggle:
- platform: template
name: "Follow Me"
id: follow_me
optimistic: true
restore_mode: RESTORE_DEFAULT_OFF
# Supports cool, fan only, dry modes
- platform: template
name: "Prevent Direct Blowing"
id: prevent_direct_blowing
optimistic: true
assumed_state: true
turn_on_action:
if:
condition:
lambda: return id(midea_climate).mode != CLIMATE_MODE_OFF;
then:
- remote_transmitter.transmit_pronto:
data: "0000 0073 0000 0064 009e 009f 0012 003b 0012 0013 0012 003b 0012 003a 0013 003a 0013 0013 0012 0013 0012 003b 0012 0013 0013 003a 0012 0013 0013 0013 0012 0013 0012 003b 0012 003a 0013 0013 0012 003b 0012 003a 0013 003a 0012 003b 0012 0013 0013 003a 0012 0013 0013 003a 0012 0013 0013 0013 0012 0013 0013 0012 0013 003a 0013 0013 0012 003a 0013 0013 0012 0013 0013 003a 0012 0013 0013 003a 0012 003b 0012 0013 0012 003b 0012 003a 0013 003a 0013 0013 0012 003a 0013 0013 0012 0013 0013 003a 0012 0013 0013 0013 0012 00bb 009f 009f 0012 003a 0013 0013 0012 003a 0013 003a 0013 003a 0012 0013 0013 0013 0012 003a 0013 0013 0012 003a 0013 0013 0012 0013 0013 0013 0012 003a 0013 003a 0013 0012 0013 003a 0013 003a 0012 003b 0012 003a 0013 0013 0012 003a 0013 0013 0012 003b 0012 0013 0012 0013 0013 0013 0012 0013 0013 003a 0012 0013 0013 003a 0012 0013 0013 0013 0012 003a 0013 0013 0012 003b 0012 003a 0013 0013 0012 003a 0013 003a 0013 003a 0012 0013 0013 003a 0012 0013 0013 0013 0012 003a 0013 0013 0012 0013 0013 0e4a"
turn_off_action:
if:
condition:
lambda: return id(midea_climate).mode != CLIMATE_MODE_OFF;
then:
- remote_transmitter.transmit_pronto:
data: "0000 0073 0000 0064 00a1 009b 0015 0037 0014 0011 0015 0037 0015 0037 0014 0039 0014 0011 0014 0011 0015 0037 0015 0011 0014 0037 0015 0011 0014 0011 0014 0011 0015 0037 0014 0039 0014 0011 0015 0037 0014 0039 0014 0037 0015 0037 0014 0012 0013 0039 0014 0012 0014 0037 0014 0012 0013 0012 0014 0012 0014 0011 0014 0039 0013 0012 0014 0039 0013 0012 0014 0011 0014 0039 0015 0011 0014 0037 0015 0037 0014 0039 0013 0012 0014 0012 0014 0037 0015 0011 0013 0039 0015 0011 0013 0012 0015 0011 0014 0037 0015 0037 0013 00bb 00a0 009c 0014 0039 0014 0011 0014 0039 0014 0037 0015 0037 0014 0012 0014 0011 0014 0039 0014 0011 0014 0039 0014 0011 0014 0012 0013 0012 0013 003a 0013 0039 0014 0012 0013 003a 0013 0039 0014 0039 0013 003a 0014 0011 0014 0039 0013 0012 0014 0039 0013 0012 0014 0012 0013 0012 0014 0011 0014 0039 0014 0012 0013 0039 0014 0012 0013 0012 0013 003a 0013 0012 0014 0039 0013 003a 0013 0039 0014 0012 0013 0012 0014 0039 0013 0012 0014 0039 0013 0012 0014 0012 0013 0012 0014 0039 0013 003a 0013 0e4a"
sensor:
- platform: template
name: "Target Temperature"
device_class: "temperature"
state_class: "measurement"
unit_of_measurement: °C
icon: mdi:thermometer
lambda: |-
if (id(midea_climate).mode != CLIMATE_MODE_OFF) {
return id(midea_climate).target_temperature;
}
return NAN;
- platform: template
name: "Indoor Temperature"
device_class: "temperature"
state_class: "measurement"
unit_of_measurement: °C
icon: mdi:thermometer
lambda: return id(midea_climate).current_temperature;
- platform: resistance
sensor: source_sensor
configuration: UPSTREAM
resistor: 10kOhm
id: photoresistor_sensor
name: Display Photoresistor
disabled_by_default: true
entity_category: diagnostic
filters:
- clamp:
min_value: $min_photoresistor_threshold
max_value: $max_photoresistor_threshold
on_value:
- lambda: |-
if(id(midea_climate).mode == CLIMATE_MODE_OFF){
id(display_switch).publish_state(false);
}else if(id(display_photoresistor_threshold).has_state() && x < id(display_photoresistor_threshold).state){
id(display_switch).publish_state(true);
}else{
id(display_switch).publish_state(false);
}
- platform: adc
pin: GPIO2
id: source_sensor
attenuation: auto
update_interval: 1s
- platform: homeassistant
id: follow_me_temp
entity_id: $follow_me_temperature_sensor
filters:
- throttle: 10s
- heartbeat: 2min
- debounce: 1s
on_value:
if:
condition:
and:
- lambda: return id(midea_climate).mode != CLIMATE_MODE_OFF;
- switch.is_on: follow_me
then:
midea_ac.follow_me:
temperature: !lambda "return x;"
beeper: false
number:
- platform: template
name: "Display Photoresistor Threshold"
id: display_photoresistor_threshold
icon: "mdi:alarm-light-outline"
unit_of_measurement: "ohm"
optimistic: true
min_value: $min_photoresistor_threshold
max_value: $max_photoresistor_threshold
initial_value: $default_display_photoresistor_threshold
restore_value: true
step: 1
entity_category: config
button:
- platform: template
name: Swing Step
icon: mdi:tailwind
on_press:
if:
condition:
lambda: return id(midea_climate).mode != CLIMATE_MODE_OFF;
then:
midea_ac.swing_step:
- platform: template
name: Active Clean
on_press:
- remote_transmitter.transmit_pronto:
data: "0000 0073 0000 0064 00a0 009c 0015 0037 0014 0011 0014 0039 0014 0039 0014 0037 0014 0012 0014 0011 0014 0039 0014 0011 0014 0039 0014 0011 0014 0013 0013 0011 0014 0039 0014 0039 0014 0011 0014 0039 0014 0037 0014 0039 0014 0039 0014 0011 0014 0039 0014 0012 0013 0039 0014 0012 0014 0011 0014 0011 0014 0012 0014 0037 0014 0012 0014 0039 0013 0012 0014 0011 0014 0039 0014 0011 0014 0012 0014 0037 0014 0039 0014 0039 0014 0039 0014 0039 0013 0012 0014 0039 0014 0037 0014 0012 0014 0011 0014 0012 0013 0012 0014 00ba 00a0 009c 0015 0037 0013 0012 0014 0039 0014 0037 0014 0039 0014 0012 0013 0012 0014 0039 0014 0011 0014 0039 0014 0011 0014 0012 0013 0013 0013 0039 0014 0037 0014 0012 0014 0039 0013 0039 0014 0039 0014 0039 0014 0011 0014 0039 0014 0011 0014 0039 0014 0011 0014 0012 0014 0011 0014 0012 0013 0039 0014 0012 0014 0037 0014 0012 0014 0012 0013 0039 0014 0011 0014 0012 0013 0039 0014 0039 0014 0039 0014 0039 0013 0039 0014 0012 0014 0037 0014 0039 0014 0012 0013 0012 0014 0011 0014 0012 0014 0e4a"
- platform: template
name: Dump Config
entity_category: diagnostic
on_press:
lambda: |-
id(midea_climate).dump_config();
Thank you very much
Everything works except the display, the switch when I press it then returns to the OFF position by itself, I can’t understand why, at the moment I have no way of testing if the display actually turns off and on because the IR LED has yet to arrive at my home, but it’s a matter of a week at most.
- platform: template
name: "Accendi/Spegni Display"
id: display_switch
turn_on_action:
if:
condition:
and:
- lambda: return id(midea_climate).mode != CLIMATE_MODE_OFF;
- switch.is_off: display_switch
then:
midea_ac.display_toggle:
turn_off_action:
if:
condition:
and:
- lambda: return id(midea_climate).mode != CLIMATE_MODE_OFF;
- switch.is_on: display_switch
then:
midea_ac.display_toggle:
I was thinking of adding
optimistic: true
Could this work or is it irrelevant?
In the log I find when I press the display switch I always find this:
[D][switch:012]: 'Accendi/Spegni Display' Turning ON.
OFF is never displayed in the Log