Moin. Ich hab 2 Etherea CS-Z20XKEW, funktioniert einwandfrei. Hab das mit je einem Waveshare ESP32-C6-Mini umgesetzt. Die haben WiFi6 und das onboard-Antennendesign ist besser als bei den China-Clones. Ich habe das Ganze auf einer Lochraster aufgebaut und weil ich es noch rumliegen hatte einen 4-Kanal-Levelshifter benutzt.
Ich rate dringend davon ab, die RX/TX des ESP-Boards direkt an die Anlage zu klemmen. Der ESP32 ist NICHT 5V-tolerant. Das kann gut gehen, muss aber nicht - und wenn es zunächst geht und dann irgendwann ausfällt, wird die Fehlersuche unnötig kompliziert und für Laien fast unmöglich. So ein Levershifter kostet nur wenige Cents.
Stecker hab ich bei Ama*** bestellt (Typ PAP-05V-S schon mit Jumper Wire Connector auf der anderen Seite, 5-Pack für 7,69€) und vorsichtig umgepinnt, um die Kabelfarben vernünftig zu haben. Zusätzlich hab ich noch einen 47uF-Elko zwischen 5V und GND verbaut, das muss aber nicht zwingend sein.
Hab zusätzlich die Onboard-LED noch als WiFi-Indikator eingerichtet und zwei Diagnose-Sensoren für die WiFi-Qualität eingerichtet. Hier meine Konfiguration (Passwörter entsprechend noch setzen):
# Lokale Steuerung der Panasonic Klimaanlage
# Board Waveshare ESP32-C6-Mini
# zusätzlich Onboard-LED als WiFi-Indikator
# zusätzlich WiFi-Qualitätswerte als Diagnosedaten
esphome:
name: ac-schlafzimmer
friendly_name: AC-Schlafzimmer
on_boot:
- light.turn_on:
id: onboard_led
red: 100%
green: 0%
blue: 0%
brightness: 100%
effect: wifi_disconnected_pulse
esp32:
board: esp32-c6-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "blabla"
ota:
- platform: esphome
password: "blabla"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
on_connect:
then:
- delay: 1s
- light.turn_off: onboard_led # vorherige Effekte beenden
- component.update: wifi_signal_dbm
- component.update: wifi_signal_prozent
on_disconnect:
- light.turn_on:
id: onboard_led
red: 100%
green: 0%
blue: 0%
brightness: 100%
effect: wifi_disconnected_pulse
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ac-Schlafzimmer Fallback Hotspot"
password: "blabla"
captive_portal:
# Requires ESPHome 1.15.0+ for the even parity option
uart:
tx_pin: GPIO4 # weiß, HV2
rx_pin: GPIO5 # gelb, HV1
baud_rate: 9600
parity: EVEN
external_components:
source: github://DomiStyle/esphome-panasonic-ac
components: [panasonic_ac]
climate:
- platform: panasonic_ac
# For CZ-TACG1
type: cnt
name: Panasonic AC
horizontal_swing_select:
name: Panasonic AC Horizontal Swing Mode
vertical_swing_select:
name: Panasonic AC Vertical Swing Mode
outside_temperature:
name: Panasonic AC Outside Temperature
# Enable as needed
# eco_switch:
# name: Panasonic AC Eco Switch
# econavi_switch:
# name: Panasonic AC Econavi Switch
nanoex_switch:
name: Panasonic AC NanoeX Switch
mild_dry_switch:
name: Panasonic AC Mild Dry Switch
current_power_consumption:
name: Panasonic AC Power Consumption
# Useful when the ac does not report a current temperature (CZ-TACG1 only)
# current_temperature_sensor: temperature_sensor_id
sensor:
# WiFi Qualität
- platform: wifi_signal # WiFi Signalstärke RSSI
name: "WiFi Signal dBm"
id: wifi_signal_dbm
update_interval: 10s
entity_category: "diagnostic"
on_value:
then:
- if:
condition:
wifi.connected:
then:
# WiFi-Verbindung steht – Signalstärke linear in RGB-Farben abbilden
# Farbverlauf bei RSSI von -100 bis -50 dBm:
# -100 dBm = (255, 0, 64) — kräftiges Rot mit Magenta-Ton (RSSI schlecht)
# -90 dBm = (204, 51, 64) — rötlich-orange
# -80 dBm = (153, 102, 64) — gelblich
# -70 dBm = (102, 153, 64) — grünlich
# -60 dBm = ( 51, 204, 64) — gelbgrün bis türkisgrün
# -50 dBm = ( 0, 255, 64) — sattes Grün mit Blauanteil (RSSI sehr gut)
- lambda: |-
int dbm = (int) id(wifi_signal_dbm).state;
if (dbm > -50) dbm = -50;
if (dbm < -100) dbm = -100;
int level = (dbm + 100) * 2;
if (dbm != id(wifi_signal_level_last)) {
int last_dbm = id(wifi_signal_level_last);
id(wifi_signal_level_last) = dbm;
float t = level / 100.0;
float red = (1.0 - t) * 255.0;
float green = t * 255.0;
float blue = 64.0;
auto call = id(onboard_led).turn_on();
call.set_rgb(red / 255.0, green / 255.0, blue / 255.0);
call.set_brightness(0.15f);
call.set_effect("none");
call.perform();
ESP_LOGI("Klimaanlage", "WiFi-RSSI changed from %ddBm to %ddBm, adjust LED to rgb(%d, %d, %d)",
last_dbm, dbm, (int) red, (int) green, (int) blue);
}
- platform: template
name: "WiFi Signal Prozent"
id: wifi_signal_prozent
icon: mdi:wifi
unit_of_measurement: "%"
accuracy_decimals: 0
entity_category: "diagnostic"
internal: false
# übliche Funktion zur Umrechnung von RSSI in Prozent
lambda: |-
float rssi = id(wifi_signal_dbm).state;
if (isnan(rssi)) return NAN;
// Annahme: -100 dBm (schlecht) = 0 %, -50 dBm (gut) = 100 %
int percent = 2 * (rssi + 100);
if (percent > 100) percent = 100;
if (percent < 0) percent = 0;
return percent;
# WiFi-Status
light:
- platform: esp32_rmt_led_strip
id: onboard_led
chipset: WS2812
pin: GPIO8
num_leds: 1
rgb_order: RGB
default_transition_length: 0s
internal: true
effects:
- pulse:
name: wifi_disconnected_pulse
transition_length: 0.5s
update_interval: 0.5s
min_brightness: 0%
max_brightness: 100%
globals:
- id: wifi_signal_level_last
type: int
restore_value: no
initial_value: '-999'



