Dann würde ich vermutlich einfach den “SMlight SLWF-01 Pro” nehmen, gibt es für 17€ auf Aliexpress bzw. 33€ auf Amazon bzw. 18,50€ auf hobbyelectronica[.]nl.
Der Läuft komplett Lokal und kannst du einfach über dessen IP Abrufen und auch bei ESPhome Einrichten - die passende fertige .yaml für ESPhome & Firmware selbst stellen sie sonst auch einzeln auf ihrer Website nochmal unter Downloads bereit.
Habe den Stick selbst nicht getestet aber andere hier im Thread und auch Online findet man viele zufriedene Leute.
Von wann ist die Anlage? TCL hat ja zwischenzeitig mal umgestellt, genauso wie Kältebringer.
Bei den neueren funktioniert der SMlight SLWF-01 Pro und dann machen wie HaHans geschrieben hat, die >Software und Erklärungen bekommst Du auf der WebSite der Entwickler https://smlight.tech/product/slwf-01. Hatte ich oben am 16. Juli 2025 schon mal gepostet.
Gruß, Hain
danke zusammen!! werde ich ausprobieren
Hallo HaHans ,
Ich hatte heute mal Zeit zum Testen gehabt , deine yaml scheint dann nur bei den „neueren“ Varianten zu funktionieren. Meine Kältebringer mit Tuya Chip ohne USB kann mit dieser Konfiguration nichts anfangen , zumindest bekomme ich keine Antworten von der Anlage .
sonst sieht das aber echt Top aus .
Es lag scheinbar an der ESP Version in HA , nach einem Update läuft es ohne error durch .
Arbeitet tadellos .
Weiß jemand , wo man gute Gehäuse für die ESP erwerben kann?
Grüße Floh
Der ESP32-C6 bietet ja integriertes WiFi 6, BLE 5 und IEEE 802.15.4 (darunter Zigbee 3.0 und Thread). Außerdem unterstützt das Board die Entwicklung via USB und UART – super flexibel für Bastler.
Ich frage mich konkret:
-
Kann man statt klassisch WiFi auch Zigbee 3.0 oder Thread für die Verbindung zur Klimaanlage einsetzen?
-
Funktioniert das mit Home Assistant und ESPHome oder braucht man andere Libraries?
-
Hat jemand das Modul schon für ähnliche Anwendungen (z.B. Splitklimaanlagen, Heatpumps, Smart-Devices) getestet?
-
Gibt es Erfahrungswerte zum Pairing/Kompatibilität abseits von Tuya/Cloud?
Würde mich über Praxisberichte oder Tipps zur Firmware und Integration freuen – gerade zum lokalen Steuern ohne Hersteller-Cloud.
Hat jemand das schon umgesetzt oder Ideen für YAML/ESPHome-Config?
Danke!
@hain Ich habe heute mal versucht den ESP32-C6 mit der TCLAC zu flashen, was aber in einem compiling error endete. Interessanterweise, habe ich mir dann mal die logs von meinem bestehenden S3 angeschaut und dort wird darauf hingewiesen, das mit ESPHome 2026.1.0 zu ESP-IDF wechselt von Arduino ausgehend.
LOG:
INFO ESPHome 2025.9.1
INFO Reading configuration /config/esphome/test1.yaml...
INFO Updating https://github.com/sorz2122/tclac.git@master
INFO Updating https://github.com/I-am-nightingale/tclac.git@master
WARNING 💡 IMPORTANT: This device doesn't have a framework specified!
Currently, ESP32 defaults to the Arduino framework.
This will change to ESP-IDF in ESPHome 2026.1.0.
Note: Newer ESP32 variants (C6, H2, P4, etc.) already use ESP-IDF by default.
Why change? ESP-IDF offers:
✨ Up to 40% smaller binaries
🚀 Better performance and optimization
📦 Custom-built firmware for your exact needs
🔧 Active development and testing by ESPHome developers
Trade-offs:
⏱️ Compile times are ~25% longer
🔄 Some components need migration
What should I do?
Option 1: Migrate to ESP-IDF (recommended)
Add this to your YAML under 'esp32:':
framework:
type: esp-idf
Option 2: Keep using Arduino (still supported)
Add this to your YAML under 'esp32:':
framework:
type: arduino
Need help? Check out the migration guide:
https://esphome.io/guides/esp32_arduino_to_idf.html
INFO Starting log output from tcl-klimaanlage.local using esphome API
WARNING Can't connect to ESPHome API for tcl-klimaanlage.local: Timeout while resolving IP address for ['tcl-klimaanlage.local'] (ResolveTimeoutAPIError)
INFO Trying to connect to tcl-klimaanlage.local in the background
Weißt Du ggf. was man hier tatsächlich tun muss um das auf das neue default Framework zu bringen?
Hattest Du anstatt:
esp32:
framework:
type: esp-idf
mal
esp32:
framework:
type: arduino
ausprobiert?
Ja, aber wenn ich dann diese Änderung zurück auf den ESP32 flashe dann kommen kompilierungsfehler, esp-idf verwenden ein paar andere ausdrücke die in einem neuen git angepasst werden müssten. Bin aber zu unerfahren das umzusetzen.
Moin,
Die Datei bringt bei mit auch Fehler, dass der Speicher zu kein ist. Auf Arduino gehts.
Der Fehler mit dem Speicherplatz lag am Bluetooth proxy. Ohne den Bekomme ich auch Fehler
aber nicht zum Speicherplatz.
welche fehler bekommst du denn?
Das ist der Fehler den ich bekomme:
INFO ESPHome 2025.9.1
INFO Reading configuration /config/esphome/klimaanlage.yaml...
INFO Generating C++ source...
INFO Compiling app...
Processing klimaanlage (board: esp32-c6-devkitc-1; framework: espidf; platform: https://github.com/pioarduino/platform-espressif32/releases/download/54.03.21-2/platform-espressif32.zip)
--------------------------------------------------------------------------------
INFO Package configuration completed successfully
Removing unused dependencies...
Library Manager: Installing bblanchon/ArduinoJson @ 7.4.2
INFO Installing bblanchon/ArduinoJson @ 7.4.2
Downloading [####################################] 100%
Unpacking [####################################] 100%
Library Manager: ArduinoJson@7.4.2 has been installed!
INFO ArduinoJson@7.4.2 has been installed!
INFO Package configuration completed successfully
HARDWARE: ESP32C6 160MHz, 320KB RAM, 8MB Flash
- framework-espidf @ 3.50402.0 (5.4.2)
- tool-cmake @ 3.30.2
- tool-esp-rom-elfs @ 2024.10.11
- tool-esptoolpy @ 5.0.2
- tool-mklittlefs @ 3.2.0
- tool-ninja @ 1.13.1
- tool-scons @ 4.40801.0 (4.8.1)
- toolchain-riscv32-esp @ 14.2.0+20241119
Reading CMake configuration...
Generating assembly for certificate bundle...
Dependency Graph
|-- noise-c @ 0.1.10
|-- ArduinoJson @ 7.4.2
Compiling .pioenvs/klimaanlage/src/esphome/components/api/api_connection.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/api/api_frame_helper.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/api/api_frame_helper_noise.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/api/api_pb2.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/api/api_pb2_service.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/api/api_server.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/api/list_entities.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/api/proto.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/api/subscribe_state.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/captive_portal/captive_portal.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/climate/climate.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/climate/climate_mode.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/climate/climate_traits.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/esp32/core.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/esp32/gpio.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/esp32/helpers.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/esp32/preferences.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/esphome/ota/ota_esphome.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/json/json_util.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/logger/logger.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/logger/logger_esp32.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/logger/task_log_buffer.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/md5/md5.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/mdns/mdns_component.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/mdns/mdns_esp32.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/network/util.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/ota/ota_backend.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/ota/ota_backend_esp_idf.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/safe_mode/safe_mode.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/select/select.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/select/select_call.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/select/select_traits.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/socket/bsd_sockets_impl.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/socket/socket.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/switch/automation.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/switch/switch.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/tclac/tclac.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/template/select/template_select.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/template/switch/template_switch.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/uart/uart.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/uart/uart_component.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/uart/uart_component_esp_idf.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/uart/uart_debugger.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/web_server/list_entities.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/web_server/ota/ota_web_server.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/web_server/web_server.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/web_server_base/web_server_base.cpp.o
In file included from src/esphome/components/tclac/automation.h:4,
from src/esphome.h:52,
from src/esphome/components/tclac/tclac.cpp:7:
src/esphome/components/tclac/tclac.h:88:17: error: 'byte' does not name a type
88 | byte checksum;
| ^~~~
src/esphome/components/tclac/tclac.h:90:17: error: 'byte' does not name a type
90 | byte dataTX[38];
| ^~~~
Compiling .pioenvs/klimaanlage/src/esphome/components/web_server_idf/multipart.cpp.o
src/esphome/components/tclac/tclac.h:92:17: error: 'byte' does not name a type
92 | byte dataRX[61];
| ^~~~
src/esphome/components/tclac/tclac.h:94:17: error: 'byte' does not name a type
94 | byte poll[8] = {0xBB,0x00,0x01,0x04,0x02,0x01,0x00,0xBD};
| ^~~~
src/esphome/components/tclac/tclac.h:127:31: error: 'byte' has not been declared
127 | void sendData(byte * message, byte size);
| ^~~~
src/esphome/components/tclac/tclac.h:127:47: error: 'byte' has not been declared
127 | void sendData(byte * message, byte size);
| ^~~~
src/esphome/components/tclac/tclac.h:129:38: error: 'byte' has not been declared
129 | static String getHex(byte *message, byte size);
| ^~~~
src/esphome/components/tclac/tclac.h:129:53: error: 'byte' has not been declared
129 | static String getHex(byte *message, byte size);
| ^~~~
src/esphome/components/tclac/tclac.h:131:24: error: 'byte' does not name a type
131 | static byte getChecksum(const byte * message, size_t size);
| ^~~~
src/esphome/components/tclac/tclac.h: In constructor 'esphome::tclac::tclacClimate::tclacClimate()':
src/esphome/components/tclac/tclac.h:113:25: error: 'checksum' was not declared in this scope
113 | checksum = 0;
| ^~~~~~~~
src/esphome/components/tclac/tclac.cpp: In member function 'virtual void esphome::tclac::tclacClimate::loop()':
src/esphome/components/tclac/tclac.cpp:53:17: error: 'dataRX' was not declared in this scope
53 | dataRX[0] = esphome::uart::UARTDevice::read();
| ^~~~~~
src/esphome/components/tclac/tclac.cpp:77:17: error: 'byte' was not declared in this scope; did you mean 'std::byte'?
77 | byte check = getChecksum(dataRX, sizeof(dataRX));
| ^~~~
| std::byte
In file included from /data/cache/platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include/c++/14.2.0/bits/memory_resource.h:38,
from /data/cache/platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include/c++/14.2.0/deque:80,
from src/esphome/components/api/api_frame_helper.h:3,
from src/esphome/components/api/api_connection.h:5,
from src/esphome.h:3:
/data/cache/platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include/c++/14.2.0/cstddef:70:14: note: 'std::byte' declared here
70 | enum class byte : unsigned char {};
| ^~~~
src/esphome/components/tclac/tclac.cpp:84:21: error: 'check' was not declared in this scope
84 | if (check != dataRX[60]) {
| ^~~~~
src/esphome/components/tclac/tclac.cpp: In member function 'virtual void esphome::tclac::tclacClimate::update()':
src/esphome/components/tclac/tclac.cpp:99:67: error: ISO C++ forbids applying 'sizeof' to an expression of function type [-fpermissive]
99 | this->esphome::uart::UARTDevice::write_array(poll, sizeof(poll));
| ~^~~~~
src/esphome/components/tclac/tclac.cpp:99:53: error: no matching function for call to 'esphome::tclac::tclacClimate::write_array(int (&)(pollfd*, nfds_t, int), unsigned int)'
99 | this->esphome::uart::UARTDevice::write_array(poll, sizeof(poll));
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
In file included from src/esphome/components/tclac/tclac.h:13:
src/esphome/components/uart/uart.h:23:27: note: candidate: 'template<unsigned int N> void esphome::uart::UARTDevice::write_array(const std::array<unsigned char, N>&)'
23 | template<size_t N> void write_array(const std::array<uint8_t, N> &data) {
| ^~~~~~~~~~~
src/esphome/components/uart/uart.h:23:27: note: candidate expects 1 argument, 2 provided
src/esphome/components/uart/uart.h:21:8: note: candidate: 'void esphome::uart::UARTDevice::write_array(const uint8_t*, size_t)'
21 | void write_array(const uint8_t *data, size_t len) { this->parent_->write_array(data, len); }
| ^~~~~~~~~~~
src/esphome/components/uart/uart.h:21:35: note: no known conversion for argument 1 from 'int(pollfd*, nfds_t, int)' {aka 'int(pollfd*, unsigned int, int)'} to 'const uint8_t*' {aka 'const unsigned char*'}
21 | void write_array(const uint8_t *data, size_t len) { this->parent_->write_array(data, len); }
| ~~~~~~~~~~~~~~~^~~~
src/esphome/components/uart/uart.h:22:8: note: candidate: 'void esphome::uart::UARTDevice::write_array(const std::vector<unsigned char>&)'
22 | void write_array(const std::vector<uint8_t> &data) { this->parent_->write_array(data); }
| ^~~~~~~~~~~
src/esphome/components/uart/uart.h:22:8: note: candidate expects 1 argument, 2 provided
Compiling .pioenvs/klimaanlage/src/esphome/components/web_server_idf/utils.cpp.o
src/esphome/components/tclac/tclac.cpp: In member function 'void esphome::tclac::tclacClimate::readData()':
src/esphome/components/tclac/tclac.cpp:107:41: error: 'dataRX' was not declared in this scope
107 | current_temperature = float((( (dataRX[17] << 8) | dataRX[18] ) / 374 - 32)/1.8);
| ^~~~~~
src/esphome/components/tclac/tclac.cpp: In member function 'void esphome::tclac::tclacClimate::takeControl()':
src/esphome/components/tclac/tclac.cpp:253:9: error: 'dataTX' was not declared in this scope
253 | dataTX[7] = 0b00000000;
| ^~~~~~
src/esphome/components/tclac/tclac.cpp:556:36: error: 'getChecksum' is not a member of 'esphome::tclac::tclacClimate'
556 | dataTX[37] = tclacClimate::getChecksum(dataTX, sizeof(dataTX));
| ^~~~~~~~~~~
src/esphome/components/tclac/tclac.cpp: At global scope:
src/esphome/components/tclac/tclac.cpp:564:6: error: variable or field 'sendData' declared void
564 | void tclacClimate::sendData(byte * message, byte size) {
| ^~~~~~~~~~~~
src/esphome/components/tclac/tclac.cpp:564:29: error: 'byte' was not declared in this scope; did you mean 'std::byte'?
564 | void tclacClimate::sendData(byte * message, byte size) {
| ^~~~
| std::byte
/data/cache/platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include/c++/14.2.0/cstddef:70:14: note: 'std::byte' declared here
70 | enum class byte : unsigned char {};
| ^~~~
Compiling .pioenvs/klimaanlage/src/esphome/components/web_server_idf/web_server_idf.cpp.o
src/esphome/components/tclac/tclac.cpp:564:36: error: 'message' was not declared in this scope
564 | void tclacClimate::sendData(byte * message, byte size) {
| ^~~~~~~
src/esphome/components/tclac/tclac.cpp:564:45: error: 'byte' was not declared in this scope; did you mean 'std::byte'?
564 | void tclacClimate::sendData(byte * message, byte size) {
| ^~~~
| std::byte
/data/cache/platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include/c++/14.2.0/cstddef:70:14: note: 'std::byte' declared here
70 | enum class byte : unsigned char {};
| ^~~~
src/esphome/components/tclac/tclac.cpp:574:8: error: 'esphome::web_server_idf::String esphome::tclac::tclacClimate::getHex' is not a static data member of 'class esphome::tclac::tclacClimate'
574 | String tclacClimate::getHex(byte *message, byte size) {
| ^~~~~~~~~~~~
src/esphome/components/tclac/tclac.cpp:574:29: error: 'byte' was not declared in this scope; did you mean 'std::byte'?
574 | String tclacClimate::getHex(byte *message, byte size) {
| ^~~~
| std::byte
/data/cache/platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include/c++/14.2.0/cstddef:70:14: note: 'std::byte' declared here
70 | enum class byte : unsigned char {};
| ^~~~
src/esphome/components/tclac/tclac.cpp:574:35: error: 'message' was not declared in this scope
574 | String tclacClimate::getHex(byte *message, byte size) {
| ^~~~~~~
src/esphome/components/tclac/tclac.cpp:574:44: error: 'byte' was not declared in this scope; did you mean 'std::byte'?
574 | String tclacClimate::getHex(byte *message, byte size) {
| ^~~~
| std::byte
/data/cache/platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include/c++/14.2.0/cstddef:70:14: note: 'std::byte' declared here
70 | enum class byte : unsigned char {};
| ^~~~
src/esphome/components/tclac/tclac.cpp:574:55: error: expected ',' or ';' before '{' token
574 | String tclacClimate::getHex(byte *message, byte size) {
| ^
src/esphome/components/tclac/tclac.cpp:584:1: error: 'byte' does not name a type
584 | byte tclacClimate::getChecksum(const byte * message, size_t size) {
| ^~~~
Compiling .pioenvs/klimaanlage/src/esphome/components/wifi/wifi_component.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/components/wifi/wifi_component_esp_idf.cpp.o
Compiling .pioenvs/klimaanlage/src/esphome/core/application.cpp.o
*** [.pioenvs/klimaanlage/src/esphome/components/tclac/tclac.cpp.o] Error 1
========================= [FAILED] Took 14.61 seconds =========================
Moin Steuerlexi,
Genau, auf den ersten Blick ist das die Meldung, wenn ich noch ein BT Proxy mit auf den ESP setze, kommt nicht genug Speicherplatz auf dem ESP. Was auch erstmal nicht Nachvollziehbar ist.
Moin,
Hast du schon ne Lösung ?
Ich erstmal noch nicht , auch nicht für das Problem, einen BT Proxy einzustellen.
Kann zufällig jemand sagen , wo man vernünftige Gehäuse bekommt für den ESP32 D1 oder ESP32 dev ?
Grüße Floh
Bislang habe ich noch keine Lösung. Es scheint halt so als müsste den repository auf das neue default framework angepasst werden und das übersteigt meine bescheidenen Möglichkeiten.
Es liegt wohl daran das der ESP32 C6 noch nicht von ESPHome komplett unterstützt. Sollte also bald von alleine kommen und dann sollte es auch gehen.
nein, das ist ein altes modell. Der c6 ist der aktuelle chipsatz der Matter/Thread sowie zigbee mitbringt.
Kann mir jemand bitte helfen bekomme das Ding nicht gekoppelt habe alle Chinesen apps ausprobiert und alle Tasten kombos liegt es am neuen android?
Hier geht es doch nicht darum die Anlagen in eine Chinesen-App zu bekommen, noch in Android, sondern rein in Home Assistant.
