Klimatyzacja HAIER - jak zintegrować z HA

Może się dołączę, bo przechodziłem przez te problemy jakiś rok temu. Zastosowałem gotowy komponent z ESPHome. Ale jedna dziwna sprawa. Mam klimatyzacje Haier, którą przed przeróbką sterowałem z aplikacji SmartAir2. Z hOn nie działało. Jednak w pliku konfiguracyjnym musiałem zaznaczyć hOn, aby było OK, Tak używam od dłuższego czasu i jest OK. Poniżej mój plik yaml , zostawiłem linijki, które pokazują z czego nie korzystam.

esphome:
  name: "ac-haier-01"
  friendly_name: AC-Haier-01

esp8266:
  board: esp01_1m

# Enable logging
logger:
  baud_rate: 0

# Enable Home Assistant API
api:
  encryption:
    key: "VlVVlpqugety4dBBOx/mPMp6xzENi1lcHMdTUQFmLQk="

ota:
  - platform: esphome
    password: "ca03b567cecf740b9cdc380e1d0bd5f4"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
 

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp01 Fallback Hotspot"
    password: "XWECE6nHtpKR"

#captive_portal:
uart:
  baud_rate: 9600
  tx_pin: 1
  rx_pin: 3
  id: haier_uart



climate:
  - platform: haier
    id: haier_ac
    protocol: hOn
    name: Haier SmartAir2 Climate
    uart_id: haier_uart
    wifi_signal: true
    visual:
      min_temperature: 16 °C
      max_temperature: 30 °C
      temperature_step: 1 °C
    supported_modes:
      - 'OFF'
      - HEAT_COOL
      - COOL
      - HEAT
      - DRY
      - FAN_ONLY
    supported_swing_modes:
      - 'OFF'
      - VERTICAL
      - HORIZONTAL
      - BOTH
    supported_presets:
      - BOOST
      - AWAY
#    control_method:
#      - SET_SINGLE_PARAMETER
#      - SET_GROUP_PARAMETERS


switch:
#  - platform: template
#    id: haier_ac_health_mode
#    name: Haier SmartAir2 Climate health mode
#    icon: mdi:leaf
#    restore_mode: RESTORE_DEFAULT_OFF
#    lambda: |-
#      return id(haier_ac).get_health_mode();
#    turn_on_action:
#      climate.haier.health_on: haier_ac
#    turn_off_action:
#      climate.haier.health_off: haier_ac
  - platform: template
    id: haier_ac_display_switch
    name: Haier SmartAir2 Climate display
    icon: mdi:led-on
    entity_category: config
    restore_mode: RESTORE_DEFAULT_ON
    lambda: |-
      return id(haier_ac).get_display_state();
    turn_on_action:
      climate.haier.display_on: haier_ac
    turn_off_action:
      climate.haier.display_off: haier_ac

        

To oznaczałoby, że przed przeróbką korzystałeś z dongla wifi z oryginalnym firmware’m i jednocześnie NIE miałeś integracji z HA. Jeśli tak było, to wszystko się zgadza i mogę potwierdzić, że u mnie też tak było. Chcąc mieć klimę z SmartAir2 zintegrowaną z HA musiałem wywalić oryginalnego dongla i wstawić w jego miejsce ESP z własnym firmwarem.

Z łatwością mogę sobie wyobrazić też i takie rozwiązanie, w którym od pewnego czasu elektronika Haier jest już fabrycznie przygotowana na oba protokoły. I to ona decydowałaby o sposobie komunikacji po rozpoznaniu protokołu wymuszanego przez firmare. Bowiem wstawienie bramki XOR między dwa protokoły to przecież żaden problem.
No ale to tylko luźne dywagacje i przypuszczenia. Aż tak blisko jeszcze nie zakolegowałem się z Haierem, żeby mieć od nich potwierdzenie czarno na białym… :wink:

Powyższa uwaga @macek’a też daje do myślenia… Okazuje się, że istnieje zbyt wiele odmian i wersji nawet w obrębie tego samego modelu urządzenia, aby jednoznacznie zawyrokować, co u kogo będzie chodzić. Pozostają więc wyłącznie wyniki własnych, indywidualnych prac doświadczalnych.

Coś strasznie przepłacasz za te moduły wifi… Donlge Haier WiFi widziałem niedawno w Leroy Merlin w cenie 99,- Używają ich w klimatyzatorach sprzedawanych tam pod własną marką Equation.
Wiem, że działają z Haierem, bo kiedyś ich używałem.

Breaking News: Dziś (20.01.2025) te dongle są po niecałe 58 zł! Właśnie sprawdziłem. To są oryginalne Haier’y (taki przynajmniej jest nadruk wytrawiony na płytce).

Dziękuję Wam dobrzy ludzie za ten temat - żyłem w przeświadczeniu, że A/C Haiera da się podłączyć do HA tylko przez tę ich chmurę, a tu taka miła niespodzianka :slight_smile:

Zatem informacyjnie: mój model to “Revive Plus” (jedn. wewn. AS25RBAHRA-PL), oryginalnie z płytką ESP32-for-Haier, podłączoną przez małe gniazdo 4-pinowe. Wczoraj zastąpiłem ją modułem esp32-cam (tym małym za 35 zł, akurat taki miałem w domu). Skopiowałem config z “maksymalnego przykładu” dla protokołu hon, musiałem tylko dodać “answer_timeout: 200ms” (widziałem timeouty na poziomie max 100ms, więc dałem 2x dla pewności). Moja wersja ESPhome: 2024.10.0; wersja Home Assistant: 2024.10.4.

Na ile sprawdziłem, wszystkie funkcje tej klimy zarówno pokazują się w HA po zmianie pilotem, jak i dają się zmieniać z poziomu HA. Na wyświetlaczu klimy świeci się symbol WiFi. Co ciekawe, mam w HA więcej ustawień nawiewu pionowego, niż mogę wybrać na pilocie: pilot nie ustawia położenia “Max Down”, na które klima reaguje prawie pionowym ustawieniem łopatek. W poziomie jest 5 pozycji (nie licząc “auto”) i z pilota też.

2 polubienia

Tak, inżynieria odwrotna daje czasem zaskakująco dobre wyniki w porównaniu z tą klasyczną. Bywa, że prowadzi ona do ciekawego wniosku, że: 1+2 != 2+1 :wink:

Choć ostateczna decyzja należy do moderatora, to myślę, że powoli możemy zamykać ten wątek, który ‘nieopatrznie’ utworzyłem ponad 3 lata temu. Już chyba niewiele można tu dodać… Cieszę się razem z Wami, że wspólnie ogarnęliśmy temat. Ja także dziękuję Wam wszystkim za cenne pomysły i inspiracje! :slight_smile:

1 polubienie

To jeszcze ja na koniec, jeśli miałoby to znaczenie…
Dzisiaj ukonczyłem nowego ‘dongla’ na bazie najmniejszego esp8266 ‘esp01s’ - akurat takie mialem w domu. U mnie też oryginalnie siedział ESP32-for haier na mini złączu (nie usb A)

I teraz wyglada to w ten sposob.

Zrobilem małego moda na adapterze 5v-3.3V by zasilanie sie zgadzało i wgrałem takie oto ustawienia:

esphome:
  name: haier-salon
  friendly_name: Haier Salon
  min_version: 2024.11.0
  name_add_mac_suffix: false

esp8266:
  board: esp01_1m

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.111.47
    gateway: 192.168.111.1
    subnet: 255.255.255.0
  ap:
    ssid: "Haier Salon Fallback Hotspot"
    password: !secret wifi_password

external_components:
  - source: github://esphome/esphome@dev
    components: [ haier ]

api:

ota:
  - platform: esphome
    password: ""


uart:
  - id: ac_port
    baud_rate: 9600
    tx_pin: 1
    rx_pin: 3

logger:
  baud_rate: 0

#web_server:

climate:
  - platform: haier
    id: haier_climate
    protocol: hOn
    name: Climate
    uart_id: ac_port
    wifi_signal: true
    visual:
      min_temperature: 16 °C
      max_temperature: 30 °C
      temperature_step: 1 °C
    supported_modes:
    - 'OFF'
    - HEAT_COOL
    - COOL
    - HEAT
    - DRY
    - FAN_ONLY
    supported_swing_modes:
    - 'OFF'
    - VERTICAL
    - HORIZONTAL
    - BOTH
    supported_presets:
    - AWAY
    - BOOST
    - SLEEP
    
switch:
  - platform: template
    id: haier_climate_display_switch
    name: Wyświetlacz
    icon: mdi:led-on
    entity_category: config
    restore_mode: RESTORE_DEFAULT_ON
    lambda: |-
      return id(haier_climate).get_display_state();
    turn_on_action:
      climate.haier.display_on: haier_climate
    turn_off_action:
      climate.haier.display_off: haier_climate
  - platform: template
    id: haier_climate_beeper_switch
    entity_category: config
    name: Beep
    icon: mdi:volume-high
    restore_mode: RESTORE_DEFAULT_ON
    lambda: |-
      return id(haier_climate).get_beeper_state();
    turn_on_action:
      climate.haier.beeper_on: haier_climate
    turn_off_action:
      climate.haier.beeper_off: haier_climate
  - platform: restart
    name: Restart AC Salon

sensor:
  - platform: haier
    haier_id: haier_climate
    outdoor_temperature:
      name: Outdoor Temperature
    humidity:
      name: Indoor Humidity
    compressor_current:
      name: Compressor Current
    compressor_frequency:
      name: Compressor Frequency
    expansion_valve_open_degree:
      name: Expansion Valve Open Degree
    indoor_coil_temperature:
      name: Indoor Coil Temperature
    outdoor_coil_temperature:
      name: Outdoor Coil Temperature
    outdoor_defrost_temperature:
      name: Outdoor Defrost Temperature
    outdoor_in_air_temperature:
      name: Outdoor In Air Temperature
    outdoor_out_air_temperature:
      name: Outdoor Out Air Temperature
    power:
      name: Power
  - platform: wifi_signal
    name: WiFi Signal
    update_interval: 30s

binary_sensor:
  - platform: haier
    haier_id: haier_climate
    compressor_status:
      name: Outdoor Compressor Status
    defrost_status:
      name: Defrost Status
    four_way_valve_status:
      name: Four Way Valve Status
    indoor_electric_heating_status:
      name: Indoor Electric Heating Status
    indoor_fan_status:
      name: Indoor Fan Status
    outdoor_fan_status:
      name: Outdoor Fan Status

# Funkcje dodatkowe
button:
  - platform: template
    name: Self Cleaning
    icon: mdi:spray-bottle
    on_press:
      - climate.haier.start_self_cleaning: haier_climate
# Introduced in (some) models starting from 2021
  - platform: template
    name: Stericleaning
    icon: mdi:spray-bottle
    on_press:
      - climate.haier.start_steri_cleaning: haier_climate

text_sensor:
  - platform: template
    name: Cleaning Status
    icon: mdi:spray-bottle
    lambda: return id(haier_climate).get_cleaning_status_text();


select:
  - platform: template
    id: haier_climate_vertical_direction
    name: Airflow Vertical
    entity_category: config
    icon: mdi:arrow-expand-vertical
    update_interval: 5s
    options:
      - Health Up
      - Max Up
      - Up
      - Center
      - Down
      - Max Down
      - Health Down
      - Auto
    lambda: >-
      switch (id(haier_climate).get_vertical_airflow().value_or(esphome::haier::hon_protocol::VerticalSwingMode::CENTER))
      {
          case esphome::haier::hon_protocol::VerticalSwingMode::HEALTH_UP:
              return std::string("Health Up");
          case esphome::haier::hon_protocol::VerticalSwingMode::MAX_UP:
              return std::string("Max Up");
          case esphome::haier::hon_protocol::VerticalSwingMode::UP:
              return std::string("Up");
          default:
          case esphome::haier::hon_protocol::VerticalSwingMode::CENTER:
              return std::string("Center");
          case esphome::haier::hon_protocol::VerticalSwingMode::DOWN:
              return std::string("Down");
          case esphome::haier::hon_protocol::VerticalSwingMode::MAX_DOWN:
              return std::string("Max Down");
          case esphome::haier::hon_protocol::VerticalSwingMode::HEALTH_DOWN:
              return std::string("Health Down");
          case esphome::haier::hon_protocol::VerticalSwingMode::AUTO:
          case esphome::haier::hon_protocol::VerticalSwingMode::AUTO_SPECIAL:
              return std::string("Auto");
      }
    set_action:
      - climate.haier.set_vertical_airflow:
          id: haier_climate
          vertical_airflow: !lambda >-
            if (x == "Health Up")
                return esphome::haier::hon_protocol::VerticalSwingMode::HEALTH_UP;
            else if (x == "Max Up")
                return esphome::haier::hon_protocol::VerticalSwingMode::MAX_UP;
            else if (x == "Up")
                return esphome::haier::hon_protocol::VerticalSwingMode::UP;
            else if (x == "Down")
                return esphome::haier::hon_protocol::VerticalSwingMode::DOWN;
            else if (x == "Max Down")
                return esphome::haier::hon_protocol::VerticalSwingMode::MAX_DOWN;
            else if (x == "Health Down")
                return esphome::haier::hon_protocol::VerticalSwingMode::HEALTH_DOWN;
            else if (x == "Auto")
                return esphome::haier::hon_protocol::VerticalSwingMode::AUTO;
            else
                return esphome::haier::hon_protocol::VerticalSwingMode::CENTER;
  - platform: template
    id: haier_climate_horizontal_direction
    name: Airflow Horizontal
    entity_category: config
    icon: mdi:arrow-expand-horizontal
    update_interval: 5s
    options:
      - Max Left
      - Left
      - Center
      - Right
      - Max Right
      - Auto
    lambda: >-
      switch (id(haier_climate).get_horizontal_airflow().value_or(esphome::haier::hon_protocol::HorizontalSwingMode::CENTER))
      {
          case esphome::haier::hon_protocol::HorizontalSwingMode::MAX_LEFT:
              return std::string("Max Left");
          case esphome::haier::hon_protocol::HorizontalSwingMode::LEFT:
              return std::string("Left");
          default:
          case esphome::haier::hon_protocol::HorizontalSwingMode::CENTER:
              return std::string("Center");
          case esphome::haier::hon_protocol::HorizontalSwingMode::RIGHT:
              return std::string("Right");
          case esphome::haier::hon_protocol::HorizontalSwingMode::MAX_RIGHT:
              return std::string("Max Right");
          case esphome::haier::hon_protocol::HorizontalSwingMode::AUTO:
              return std::string("Auto");
      }
    set_action:
      - climate.haier.set_horizontal_airflow:
          id: haier_climate
          horizontal_airflow: !lambda >-
            if (x == "Max Left")
                return esphome::haier::hon_protocol::HorizontalSwingMode::MAX_LEFT;
            else if (x == "Left")
                return esphome::haier::hon_protocol::HorizontalSwingMode::LEFT;
            else if (x == "Right")
                return esphome::haier::hon_protocol::HorizontalSwingMode::RIGHT;
            else if (x == "Max Right")
                return esphome::haier::hon_protocol::HorizontalSwingMode::MAX_RIGHT;
            else if (x == "Auto")
                return esphome::haier::hon_protocol::HorizontalSwingMode::AUTO;
            else
                return esphome::haier::hon_protocol::HorizontalSwingMode::CENTER;

niestety moduł ESP01s łapał straszne zwiechy i sie restartował do jakies 20s ze wzgledu na mała wydajnosc procka, wiec musialem zrezygnować z webservera (odchaczony w kodzie) i działa pieknie i stabilnie.

Wszystkie funkcje działają poprawnie oprócz sensora wilgotnosci powietrza ktory pokazuje ciągłe 0%

Moja jednostka to: AS50S2SF1FA-BH

Pozdrawiam i serdecznie dziekuje za pomoc!

2 polubienia

Co to za adapter dla ESP-01?

A czemu wciąż siedzisz w dev, skoro mamy już wersję stabilną? Wg mnie ta sekcja konfigu jest raczej do usunięcia…

ESP01 nie ma wbudowanego regulatora napięcia 3.3V, a Haier podaje 5V. Bez tego adaptera ESP8266 na pokładzie by sie uzmażył. Adapter taki ma tylko 4 piny wyprowadzone +3.3V/GND/TX/RX wiec to akurat siadło…

kupione za pare PLN na portalu aukcyjnym - i teraz po małych przeróbkach idealnie miesci sie w kieszeni wifi haiera.

No tak, w sumie to do usunięcia :slight_smile:

Podpowiedź dla zainteresowanych: do mini złącza, do którego jest podpięty esp32-for-haier, można kupić gotowe gniazdo na płytce. Nawet wyprowadzenia można sobie wybrać.

Płyta transferowa GH1.25 1,25 do 2,54

Kupiłem, podłączyłem do tego gniazda ESP-01s na adapterze 5V-3.3V (tak jak u @tykasan - dziękuję za koncepcję i gotowy YAML) i działa jak marzenie. Tylko jeszcze trzeba to trochę pougniatać bo na razie dynda na kabelkach pod klimatyzatorem. Ale ja z tych co sami nie lutują, teraz muszę poszukać podwykonawcy z lutownicą :slightly_smiling_face:

PS Piszę pierwszy raz na forum, ale oglądam od dawna. Dziękuję za wiele cennych porad!

4 polubienia

Skopiowałem Twój kod, pozamieniałem na moje wartości haseł i WiFi, ale
co bym nie zrobił - zawsze mam ten błąd:

INFO Reading configuration /config/esphome/dykta.yaml…
ERROR Unable to import component haier.climate:

Szopen mi już kiedyś odpowiedział, napisał, że “haier od dawna jest w gałęzi stabilnej”, tyle, że założył, że ja rozumiem jego odpowiedz… ;))) Nie mam pojęcia co to znaczy i co to ma mi podpowiedzieć. Jeśli dobrze rozumiem, to mój ESPhome nie wie co to haier.climate i nie wie skąd go pobrać. Jak mu podpowiedzieć zakładając, że podpowiadający (ja) działa jak małpa nie rozumiejąc na grosz, jak działa ESP, jak napisać kod i jedynie kopiuje to co ktoś mądrzejszy napisze?

Odpowiedź @szopen’a oznacza tyle, że możesz zrezygnować z tej sekcji:

external_components:
  - source: github://esphome/esphome@dev
    components: [ haier ]

Jak widać, jest w nim odwołanie do komponentu zewnętrznego external_components, którym jest zasób deweloperski esphome@dev, czyli oficjalnie jeszcze nie przeznaczony do środowisk produkcyjnych (słowo dev właśnie na to wskazuje). Ale skoro zasób ten jest już stabilny, jak napisał @szopen (dopuszczony do zastosowań produkcyjnych), to nie jest już w stanie deweloperskim…

PS. Słowo deweloper odnosi się do producenta oprogramowania, nie ma nic wspólnego z budownictwem… :wink:

Dziękuję Ci za to, już drugi raz mi wysyłasz tę instrukcję. Doceniam.

Niestety, choć może to być dla Ciebie dziwne, nic mi to nie daje. Jeśli się nie jest programistą, jeśli się nie jest specjalistą od ESP, to przeczytanie dziesięciokrotne tego tekstu nie daje - uwierz mi - informacji dlaczego dostaję taki błąd. Zakładacie na tym forum, że wszyscy użytkownicy HA to osoby techniczne, rozumiejące co to jest port UART czy złącze JST SM04B-GHS-TB. Instrukcje pisze bowiem ktoś, kto wie o czym pisze i nie potrafi sobie wyobrazić na którym poziomie wiedzy jest czytający. Gdy czyta to inny gość który się na tym zna - Ty np, to też wie co tam jest napisane. Naprawdę doceniam, że chce Ci się nieść pomoc i podsyłać mi materiały. Uwierz, dokładnie przeczytałem już pół roku temu gdy mi przesłałeś pierwszym razem tę instrukcję, starałem się wygooglać wszystko co w niej nie rozumiałem i poszerzyć moją wiedzę. Nie spodziewam się, że ktoś to zrobi za mnie, nie gniewam się - ba! działa to na mnie mobilizująco! - jak ktoś bardziej lub mniej otwarcie mówi: doucz się zanim będziesz marnować nas czas. Ale nadal NIE MAM POJĘCIA dlaczego dostaję ten błąd.

To doskonale zrozumiałem i już w moim kodzie dawno tego nie ma. Ale nadal mam ten błąd.

Błąd ERROR Unable to import component haier.climate: wskazywałby na to, że próbujesz zaciągnąć komponent haier skądś z zewnątrz, ale z jakichś powodów Twój ESPHome nie ma do niego dostępu.
Dlatego najszybszym i chyba najskuteczniejszym rozwiązaniem jest prześledzenie instrukcji wskazanej przez @szopen 'a, ale nie chcę się wymądrzać… Na tym Forum są znacznie bardzie znamienite mózgi ode mnie…

Nie zauważyłem, że już publikowałem linka do dokumentacji, podejrzewałem, że używasz nadal konfiguracji pod wersję deweloperską…

Niestety nie podajesz aktualnych użytecznych informacji (choćby swojego całego YAMLa)

Mój kod (skopiowany z forum i poprawiony gdzie umiałem)

 esphome:
   name: dyktatornia 
 esp8266:
   board: esp01_1m
 
 api:
   password: "mojehasło"
 
 ota:
   safe_mode: true
   password: "moje hasło"
   
 wifi:
   ssid: mójSsid
   password: "Mojehasło"
   ap:
     ssid: "dyktatornia Fallback Hotspot"
     password: "mojehasło"
     
 uart:
   - id: ac_port
     baud_rate: 9600
     tx_pin: 1
     rx_pin: 3
 
 logger:
   level: DEBUG
   hardware_uart: UART1
 
 web_server:
 
 climate:
   - platform: haier
     id: haier_climate
     protocol: smartAir2
     name: dyktatornia
     uart_id: ac_port
 
     wifi_signal: true
 
     visual:
       temperature_step:
         target_temperature: 1
         current_temperature: 1
       
     supported_modes:
     - 'OFF'
     - HEAT_COOL
     - COOL
     - HEAT
     - DRY
     - FAN_ONLY
     supported_swing_modes:
     - 'OFF'
     - VERTICAL
     - HORIZONTAL
     - BOTH
     supported_presets:
     - COMFORT
     - BOOST

 switch:
   - platform: template
     id: haier_climate_display_switch
     name: Dyktatornia Wyświetlacz
     icon: mdi:led-on
     entity_category: config
     restore_mode: "ALWAYS_OFF"
     lambda: |-
       return id(haier_climate).get_display_state();
     turn_on_action:
       climate.haier.display_on: haier_climate
     turn_off_action:
       climate.haier.display_off: haier_climate
   - platform: template
     id: haier_climate_health_mode
     name: Dyktatornia Tryb HEALTH
     icon: mdi:leaf
     restore_mode: "ALWAYS_OFF"
     lambda: |-
       return id(haier_climate).get_health_mode();
     turn_on_action:
       climate.haier.health_on: haier_climate
     turn_off_action:
       climate.haier.health_off: haier_climate
   - platform: restart
     name: Restart dyktatornia
 
 sensor:
   - platform: wifi_signal
     name: Dyktatornia WiFi Signal
     update_interval: 30s

i odpowiedz z ESPHome:

INFO Reading configuration /config/esphome/dykta.yaml…
Failed config

climate.haier: [source /config/esphome/dykta.yaml:42]

Platform not found: ‘climate.haier’.
platform: haier
id: haier_climate
protocol: smartAir2
name: AC Salon
uart_id: ac_port
wifi_signal: True
visual: […]

Wklej jak należy (to wtedy spróbuję to skompilować u siebie)

I jeszcze parę pytań

  • jaką masz płytkę?
  • czy to kiedykolwiek działało?
  • jaką masz wersję ESPHome?

edit - sprawdź czy teraz wkleiłeś poprawnie, bo to nie ma prawa działać (są nadmiarowe spacje)

koniecznie musisz to sprawdzić i jeszcze raz wkleić, bo jest totalny nadmiar błędów i nie mam tyle czasu by to pisać od nowa

dobra, widzę, że się nie doczekam, tu masz poprawioną wersję na tyle na ile potrzeba dla kompilacji, nie wiem czy to wystarczy do działania (usunąłem ponad 100 błędów składni, więc z nadmiaru roboty już nie wnikałem w dokumentację, ale linka masz już 2x to sobie porównaj każdą linijkę z dokumentacją)

edit2 - podejrzewam, że zamiast wkleić jak należy tylko usunąłeś znaki większości (używane przy formatowaniu cytowania) zamiast po prostu wkleić ze źródła poprawnie, bo jakoś nie wierzę, że w każdej linijce masz w swoim faktycznym YAMLu błędy.

substitutions:
  name: "dyktatornia"
  friendly_name: "dyktatornia"

esphome:
  name: ${name}
  friendly_name: ${friendly_name}


esp8266:
   board: esp01_1m
 
api:
  encryption:
    key: "ZLRXN86uBgdhZFSCFH93AYYOgpZ/986hS12/LeAXJVQ="
 

ota:
  - platform: esphome
    password: "89b9ed38506b6a26355c2b0f84854413"
   
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: "dyktatornia Fallback Hotspot"
    password: "mojehasło"

captive_portal:

uart:
  - id: ac_port
    baud_rate: 9600
    tx_pin: 1
    rx_pin: 3
 
logger:
  level: DEBUG
  baud_rate: 0
 
web_server:
 
climate:
  - platform: haier
    id: haier_climate
    protocol: smartAir2
    name: dyktatornia
    uart_id: ac_port
 
    wifi_signal: true
 
    visual:
      temperature_step:
        target_temperature: 1
        current_temperature: 1
       
    supported_modes:
     - 'OFF'
     - HEAT_COOL
     - COOL
     - HEAT
     - DRY
     - FAN_ONLY
    supported_swing_modes:
     - 'OFF'
     - VERTICAL
     - HORIZONTAL
     - BOTH
    supported_presets:
     - COMFORT
     - BOOST

switch:
  - platform: template
    id: haier_climate_display_switch
    name: Dyktatornia Wyświetlacz
    icon: mdi:led-on
    entity_category: config
    restore_mode: "ALWAYS_OFF"
    lambda: |-
      return id(haier_climate).get_display_state();
    turn_on_action:
      climate.haier.display_on: haier_climate
    turn_off_action:
      climate.haier.display_off: haier_climate
  - platform: template
    id: haier_climate_health_mode
    name: Dyktatornia Tryb HEALTH
    icon: mdi:leaf
    restore_mode: "ALWAYS_OFF"
    lambda: |-
      return id(haier_climate).get_health_mode();
    turn_on_action:
      climate.haier.health_on: haier_climate
    turn_off_action:
      climate.haier.health_off: haier_climate
  - platform: restart
    name: Restart dyktatornia
 
sensor:
  - platform: wifi_signal
    name: Dyktatornia WiFi Signal
    update_interval: 30s

klucze które wkleiłem albo użyj (to nie są dane wrażliwe, ale jest głupio gdy każdy używa te same klucze) albo wymień na swoje, ale nie spieprz YAMLa przy wymianie

Jeśli chcesz ukrywać cokolwiek, to używaj takiej konstrukcji jak użyłem przy danych uwierzytelniających dla WiFi.

secrets-2025-05-13_15-48

a tam

# odkomentuj jeśli chcesz zasysać sekrety z HA
# !include ../secrets.yaml

wifi_ssid: jakistamSSID
wifi_pass: ijegohaslo


# reszta to też tylko przykłady, ale można podstawić praktycznie wszystko
# co podejrzewasz, że może być warte ukrycia
wifi_ssid_alternate: atuinnySSIDzhaslemzsamychcyferek
wifi_pass_alternate: "04684680468"

wifi_rcvr: "9876543210"

ota_pass: haslodlaOTA

web_username: 'uzytkownikGUIurzadzenia'
web_password: 'ijegohaslo'

przykład użycia

ota:
  - platform: esphome
    password: !secret ota_pass
   
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: !secret wifi_ssid_alternate
    password: !secret wifi_pass_alternate

@szopen, Dziękuję za wszystko co zrobiłeś i przepraszam, że musiałeś. Niestety nie mogłem od razu się tym zająć, praca wezwała.

No więc jestem dupa wołowa. ;( Już wszystko działa, wystarczyło podnieść wersję ESP. Niestety założyłem, że skoro z automatu podnoszę wersję wszystkiego, to mam zawsze najnowsze, a tu się okazało, że ESP z jakiegoś powodu przestało podpowiadać, że jest nowsza wersja. Przepraszam, mój błąd. Raczej więc to wszystko usunę by nie śmiecić. Mam tylko nieśmiałe pytanie… Sterowanie hayerem działa i wszystko ok… z wyjątkiem tego, że po każdym wysłanym poleceniu ESP przez kilka sekund drażniąco piszczy przerywanym dźwiękiem… Coś mi chce powiedzieć? To jakiś błąd?

Jakim cudem piszczy?
Co to za konstrukcja, ESP-01 w żadnej odmianie nie ma buzzera.

Jeśli coś w okolicy piszczy to buzzer na płycie głównej klimatyzatora.