diff --git a/.gitignore b/.gitignore index 66c9f45..a323ac9 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,5 @@ **/livingroom_ac/ **/kitchen_ac/ /examples/*/*.h -**/tests/test_* **/__pycache__ **/private/ \ No newline at end of file diff --git a/README-EN.md b/README-EN.md index b8177f5..b328bbc 100644 --- a/README-EN.md +++ b/README-EN.md @@ -36,7 +36,7 @@ The best way to report about your test results is writing a message in the [tele For correct component operation, you need hardware and firmware. The hardware description is located [in a separate file](docs/HARDWARE-EN.md). ### Firmware: Integration aux_ac to your configuration ### -You need [ESPHome](https://esphome.io) v.1.18.0 or above. `External_components` have appeared in this version. But it is better to use ESPHome v.1.20.4 or above, cause there were a lot of `external_components` errors corrected before this version. +You need [ESPHome](https://esphome.io) v.2025.2.0 or above. You can try esphome before 2025.2.0 but I can't guarantee error-free compilation of the examples. ## Installing ## 1. Declare external component. Read [the manual](https://esphome.io/components/external_components.html?highlight=external) for details. diff --git a/README.md b/README.md index dfa322a..3f93387 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ AUX - это один из нескольких OEM-производителей Для работы с кондиционером понадобится "железо" и прошивка. Описание электроники вынесено [в отдельный файл](docs/HARDWARE.md). ### Прошивка: интеграция aux_ac в вашу конфигурацию ESPHome ### -Для использования требуется [ESPHome](https://esphome.io) версией не ниже 1.18.0. Именно в этой версии появились `external_components`. Но лучше использовать версию 1.20.4 или старше, так как до этой версии массированно исправлялись ошибки в механизме подключения внешних компонентов.
+Для использования требуется [ESPHome](https://esphome.io) версией не ниже 2025.2.0. Работа с более ранними версиями возможна, но не гарантируется.
## Установка ## 1. Подключите компонент. diff --git a/components/aux_ac/aux_ac.h b/components/aux_ac/aux_ac.h index 68d0912..88d0015 100644 --- a/components/aux_ac/aux_ac.h +++ b/components/aux_ac/aux_ac.h @@ -4,8 +4,8 @@ /// немного переработанная версия старого компонента #pragma once -#include #include +#include #include "esphome.h" #include "esphome/components/binary_sensor/binary_sensor.h" @@ -16,6 +16,11 @@ #include "esphome/core/component.h" #include "esphome/core/helpers.h" +#ifndef USE_ARDUINO +using String = std::string; +#define F(string_literal) (string_literal) +#endif + // весь функционал сохранения пресетов прячу под дефайн // #define PRESETS_SAVING #ifdef PRESETS_SAVING @@ -710,16 +715,16 @@ namespace esphome { AC_COMMAND_BASE; ac_health_status health_status; - float temp_ambient; // внутренняя температура - int8_t temp_outdoor; // внешняя температура - int8_t temp_inbound; // температура входящая - int8_t temp_outbound; // температура исходящая - int8_t temp_compressor; // температура компрессора - ac_realFan realFanSpeed; // текущая скорость вентилятора - uint8_t inverter_power; // мощность инвертора - bool defrost; // режим разморозки внешнего блока (накопление тепла + прогрев испарителя) - ac_powLim_state power_lim_state; // статус ограничения мощности инвертора - uint8_t power_lim_value; // значение ограничения мощности инвертора + float temp_ambient; // внутренняя температура + int8_t temp_outdoor; // внешняя температура + int8_t temp_inbound; // температура входящая + int8_t temp_outbound; // температура исходящая + int8_t temp_compressor; // температура компрессора + ac_realFan realFanSpeed; // текущая скорость вентилятора + uint8_t inverter_power; // мощность инвертора + bool defrost; // режим разморозки внешнего блока (накопление тепла + прогрев испарителя) + ac_powLim_state power_lim_state; // статус ограничения мощности инвертора + uint8_t power_lim_value; // значение ограничения мощности инвертора }; typedef ac_command_t ac_state_t; // текущее состояние параметров кондея можно хранить в таком же формате, как и комманды @@ -1520,15 +1525,15 @@ namespace esphome stateByte = small_info_body->display_and_mildew & AC_MILDEW_MASK; stateChangedFlag = stateChangedFlag || (_current_ac_state.mildew != (ac_mildew)stateByte); _current_ac_state.mildew = (ac_mildew)stateByte; - + stateByte = AC_POWLIMSTAT_ON * small_info_body->inverter_power_limitation_enable; stateChangedFlag = stateChangedFlag || (_current_ac_state.power_lim_state != (ac_powLim_state)stateByte); - _current_ac_state.power_lim_state = (ac_powLim_state)stateByte; - + _current_ac_state.power_lim_state = (ac_powLim_state)stateByte; + stateByte = small_info_body->inverter_power_limitation_value; stateChangedFlag = stateChangedFlag || (_current_ac_state.power_lim_value != stateByte); _current_ac_state.power_lim_value = stateByte; - + // уведомляем об изменении статуса сплита if (stateChangedFlag) stateChanged(); @@ -1710,7 +1715,7 @@ namespace esphome // заполняем время получения пакета memset(textBuf, 0, 11); - sprintf(textBuf, "%010u", packet->msec); + sprintf(textBuf, "%010" PRIu32, packet->msec); st = st + textBuf + ": "; // формируем преамбулы @@ -2839,11 +2844,11 @@ namespace esphome { ESP_LOGCONFIG(TAG, "AUX HVAC:"); ESP_LOGCONFIG(TAG, " [x] Firmware version: %s", Constants::AC_FIRMWARE_VERSION.c_str()); - ESP_LOGCONFIG(TAG, " [x] Period: %dms", this->get_period()); + ESP_LOGCONFIG(TAG, " [x] Period: %" PRIu32 "ms", this->get_period()); ESP_LOGCONFIG(TAG, " [x] Show action: %s", TRUEFALSE(this->get_show_action())); ESP_LOGCONFIG(TAG, " [x] Display inverted: %s", TRUEFALSE(this->get_display_inverted())); ESP_LOGCONFIG(TAG, " [x] Optimistic: %s", TRUEFALSE(this->get_optimistic())); - ESP_LOGCONFIG(TAG, " [x] Packet timeout: %dms", this->get_packet_timeout()); + ESP_LOGCONFIG(TAG, " [x] Packet timeout: %" PRIu32 "ms", this->get_packet_timeout()); #if defined(PRESETS_SAVING) ESP_LOGCONFIG(TAG, " [x] Save settings %s", TRUEFALSE(this->get_store_settings())); @@ -3545,7 +3550,7 @@ namespace esphome } // устанавливает ограничение мощности сплита на нужный уровень - bool powerLimitationSetSequence(uint8_t power_limit, bool set_on=false) + bool powerLimitationSetSequence(uint8_t power_limit, bool set_on = false) { // нет смысла в последовательности, если нет коннекта с кондиционером if (!get_has_connection()) @@ -3560,12 +3565,12 @@ namespace esphome return false; } - if(power_limit != this->_power_limitation_value_normalise(power_limit)) + if (power_limit != this->_power_limitation_value_normalise(power_limit)) { _debugMsg(F("powerLimitationSetSequence: incorrect power limit value."), ESPHOME_LOG_LEVEL_WARN, __LINE__); return false; } - + // формируем команду ac_command_t cmd; _clearCommand(&cmd); // не забываем очищать, а то будет мусор @@ -3577,12 +3582,14 @@ namespace esphome // добавляем команду в последовательность if (!commandSequence(&cmd)) return false; - + if (set_on) { - _debugMsg(F("powerLimitationSetSequence: loaded (state = %02X, power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, cmd.power_lim_state, power_limit); - } else { - _debugMsg(F("powerLimitationSetSequence: loaded (power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, power_limit); + _debugMsg(F("powerLimitationSetSequence: loaded (state = %02X, power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, cmd.power_lim_state, power_limit); + } + else + { + _debugMsg(F("powerLimitationSetSequence: loaded (power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, power_limit); } return true; } @@ -3602,14 +3609,17 @@ namespace esphome _debugMsg(F("powerLimitationOnSequence: unsupported for noninverter AC."), ESPHOME_LOG_LEVEL_WARN, __LINE__); return false; // если кондиционер не инверторный, то выходим } - + // формируем команду ac_command_t cmd; _clearCommand(&cmd); // не забываем очищать, а то будет мусор - if(enable_limit){ - cmd.power_lim_state = AC_POWLIMSTAT_ON; // включить ограничение мощности - } else { - cmd.power_lim_state = AC_POWLIMSTAT_OFF; // отключить ограничение мощности + if (enable_limit) + { + cmd.power_lim_state = AC_POWLIMSTAT_ON; // включить ограничение мощности + } + else + { + cmd.power_lim_state = AC_POWLIMSTAT_OFF; // отключить ограничение мощности } // добавляем команду в последовательность if (!commandSequence(&cmd)) @@ -3622,19 +3632,19 @@ namespace esphome // включает ограничение мощности сплита bool powerLimitationOnSequence() { - return powerLimitationOnOffSequence(true); + return powerLimitationOnOffSequence(true); } // включает ограничение мощности сплита на нужный уровень bool powerLimitationOnSequence(uint8_t power_limit) { - return powerLimitationSetSequence(power_limit, true); + return powerLimitationSetSequence(power_limit, true); } - + // выключает ограничение мощности сплита bool powerLimitationOffSequence() { - return powerLimitationOnOffSequence(false); + return powerLimitationOnOffSequence(false); } // конвертирует состояние жалюзи из кодов сплита в коды для фронтенда diff --git a/components/aux_ac/climate.py b/components/aux_ac/climate.py index 2080d25..679577d 100644 --- a/components/aux_ac/climate.py +++ b/components/aux_ac/climate.py @@ -33,7 +33,7 @@ from esphome.components.climate import ( ClimateSwingMode, ) -AUX_AC_FIRMWARE_VERSION = '0.2.15' +AUX_AC_FIRMWARE_VERSION = '0.2.16' AC_PACKET_TIMEOUT_MIN = 150 AC_PACKET_TIMEOUT_MAX = 600 AC_POWER_LIMIT_MIN = 30 diff --git a/docs/AC_TESTED.md b/docs/AC_TESTED.md index 2e6fc53..04e90ae 100644 --- a/docs/AC_TESTED.md +++ b/docs/AC_TESTED.md @@ -2,12 +2,14 @@ `Aux_ac` has been tested and works successfully with the air conditioners from the list below.
Кондиционеры из списка ниже протестированы и точно совместимы с `aux_ac`. -+ ANDE (models: AND-12/FA+) ++ ANDE (models: AND-12/FA+, AND-AMWM-H12(JA) / AND-AM2-H18/4DR3) + Argo (models: Greenstyle 9000, Greenstyle 12000, Greenstyle 18000) -+ AUX (models: ALLD-H18/4R1C / AL-H18/4R1C(U), ALMD-H48/5DR2 / AL-H48/5DR2(U), AMWM-H07/4R1 multisplit, AMWM-H07/4R2(J) multisplit, AMWM-H12/4R2(J) multisplit, AMWM-H12/4R3 multisplit, ASM-H12LL, ASM-H24LD, ASW-H07A4/DE-R1DI, ASW-H07A4/FP-R1DI, ASW-H07A4/JD-R1, ASW-H09A4/FP-R1DI, ASW-H09A4/LK-700R1, ASW-H09A4/LK-700R1DI, ASW-H09B4/LK-700R1, ASW-H09B7A4, ASW-H12A4/FAR1, ASW-H12A4/HA-R2DI, ASW-H12A4/JD-R2DI, ASW-H12B4/JD-R2DI, ASW-H12C5C4/JER3DI-B8-2, ASW-H12C5C4/JOR3DI-B8, ASW-H12U3/JIR1DI-US, ASW-H18A4/QH-R1DI / AS-H18A4/QH-R1DI, AUX-07JO/I / AUX-M3-21LCLH multisplit, AUX-12JO/I / AUX-M3-21LCLHmultisplit, AUX-18QC/I / AUX-18QC/O, AWM-09G1V4-X, HA-18000BTU, KFR-26GW/BpHRB+3, KFR-26GW/BpQYA2+2R3, KFR-26GW/BpQYD2+2R3, KFR-26GW/BpR3QYA1+1, KFR-26GW/BpR3QYD1+1, KFR-26GW/BpR3QYQ1+1, KFR-26GW/BpR3QYQ2+2, KFR-35GW/BpQYA1+1R3, KFR-35GW/BpQYA2+2R3, KFR-35GW/BpQYD1+1R3, KFR-35GW/BpQYD2+2R3, KFR-35GW/BpR3QYQ1+1, KFR-35GW/BpR3QYQ2+2 (see [issue #71](https://github.com/GrKoR/esphome_aux_ac_component/issues/71) for detais of `Aegean Sea`[爱琴海] AUX family AC connection) ++ Arielli (models: ASW-H09B4/FGR3DI-EU) ++ AUX (models: ALLD-H18/4R1C / AL-H18/4R1C(U), ALMD-H48/5DR2 / AL-H48/5DR2(U), ALMD-H24/4DR2A / AL-H24/4DR2A(U), AMWM-H07/4R1 multisplit, AMWM-H07/4R2(J) multisplit, AMWM-H12/4R2(J) multisplit, AMWM-H12/4R3 multisplit, ASM-H12LL, ASM-H24LD, ASW-12A3INV/SS, ASW-H07A4/DE-R1DI, ASW-H07A4/FP-R1DI, ASW-H07A4/JD-R1, ASW-H09A4/FP-R1DI, ASW-H09A4/LK-700R1, ASW-H09A4/LK-700R1DI, ASW-H09B4/LK-700R1, ASW-H09B7A4, ASW-H12A4/FAR1, ASW-H12A4/HA-R2DI, ASW-H12A4/JD-R2DI, ASW-H12B4/JD-R2DI, ASW-H12C5C4/JER3DI-B8-2, ASW-H12C5C4/JOR3DI-B8, ASW-H12U3/JIR1DI-US, ASW-H18A4/QH-R1DI / AS-H18A4/QH-R1DI, ASW-H18E3A4, AUX-07JO/I / AUX-M3-21LCLH multisplit, AUX-09CAA/I / ASW-H09A4/CAR3DI-C3, AUX-12JO/I / AUX-M3-21LCLH multisplit, AUX-12F3H, AUX-18QC/I / AUX-18QC/O, AWM-09G1V4-X, HA-18000BTU, KFR-26GW/BpHRB+3, KFR-26GW/BpQYA2+2R3, KFR-26GW/BpQYD2+2R3, KFR-26GW/BpR3QYA1+1, KFR-26GW/BpR3QYD1+1, KFR-26GW/BpR3QYQ1+1, KFR-26GW/BpR3QYQ2+2, KFR-35GW/BpQYA1+1R3, KFR-35GW/BpQYA2+2R3, KFR-35GW/BpQYD1+1R3, KFR-35GW/BpQYD2+2R3, KFR-35GW/BpR3QYQ1+1, KFR-35GW/BpR3QYQ2+2 (see [issue #71](https://github.com/GrKoR/esphome_aux_ac_component/issues/71) for detais of `Aegean Sea`[爱琴海] AUX family AC connection) + Ballu (models: BLC_CF/in-60HN1 / BLC_O/out-60HN1, Orbis BPAC-08 OR/N6, BSUI/in-09HN8 / BSUI/out-09HN8, BSUI/in-12HN8 / BSUI/out-12HN8, BSUI/in-18HN8 / BSUI/out-18HN8, BSW/in-09HN1 / BSW/out-09HN1, BSW/in-12HN1 / BSW/out-12HN1, BSW/in-18HN1 / BSW/out-18HN1) -+ Baymak (models: Elegant Plus 12) ++ Baymak (models: Elegant Plus 9, Elegant Plus 12) + Centek (models: CT-65A09, CT-65A12, CT-65EDC07, CT-65F09, CT-65F12, CT-65FDC07, CT-65FDC09, CT-65J09, CT-65J12, CT-65J24, CT-65K07, CT-65Q09, CT-65Q12, CT-65RDC07, CT-65RDC09, CT-65RDC12, CT-65SDC07, CT-65SDC09, CT-65SDC18, CT-65U13, CT-65U18, CT-65V12, CT-65V24, CT-65X12, CT-65Z10, CT-65Z18) ++ Costway (models: FP10318US-22WH, FP10524US-22WH) + Dimstal (model: SMND-QC-12-J-Smart ECO) + Electrolux (models: EACS/I-07HSK/N3, EACS/I-09HIX-BLACK/N8) + Elgin (models: HIFI09C2WA / HIFE09C2CA, HJFI12C2WB, HWFI09B2IA / HWFE09B2NA) @@ -18,7 +20,7 @@ + Idea (models: ISR-12HR-SA7-DN1 ION) + IGC (models: RAK-07NH multysplit, RAS-07AX/RAC-07AX, RAS-V09N2X/RAC-V09N2X, RAS-V12NQR/RAC-V12NQR) + IKON (models: ASW-H12C5C4/HCR3DI-B8) -+ Ishimatsu (models: AVK-09I) ++ Ishimatsu (models: AVK-07I, AVK-09I) + Loriot (models: LAC-09AS) + Mirage (models: EWC121E - CWC121E) + Osaka (models: STVP-12HH3) diff --git a/examples/advanced/ac_common.yaml b/examples/advanced/ac_common.yaml index 3edc6b9..060be4e 100644 --- a/examples/advanced/ac_common.yaml +++ b/examples/advanced/ac_common.yaml @@ -7,7 +7,8 @@ external_components: esphome: name: $devicename - platform: ESP8266 + +esp8266: board: esp12e wifi: diff --git a/examples/simple/aux_ac_simple.yaml b/examples/simple/aux_ac_simple.yaml index 63ce5d3..12cc3d1 100644 --- a/examples/simple/aux_ac_simple.yaml +++ b/examples/simple/aux_ac_simple.yaml @@ -5,7 +5,8 @@ external_components: esphome: name: aux_air_conditioner - platform: ESP8266 + +esp8266: board: esp12e # don't forget to set your's wifi settings! diff --git a/tests/.gitignore b/tests/.gitignore deleted file mode 100644 index 0bbf89c..0000000 --- a/tests/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Gitignore settings for ESPHome -# This is an example and may include too much for your use-case. -# You can modify this file to suit your needs. -/.esphome/ -**/.pioenvs/ -**/.piolibdeps/ -**/lib/ -**/src/ -**/platformio.ini -/secrets.yaml diff --git a/tests/ac_send_packet_for_engineer.py b/tests/ac_send_packet_for_engineer.py deleted file mode 100644 index ce26215..0000000 --- a/tests/ac_send_packet_for_engineer.py +++ /dev/null @@ -1,191 +0,0 @@ -import time -import aioesphomeapi -import asyncio -import re -import sys -import argparse -from aioesphomeapi.api_pb2 import (LOG_LEVEL_NONE, - LOG_LEVEL_ERROR, - LOG_LEVEL_WARN, - LOG_LEVEL_INFO, - LOG_LEVEL_DEBUG, - LOG_LEVEL_VERBOSE, - LOG_LEVEL_VERY_VERBOSE) - -def createParser (): - parser = argparse.ArgumentParser( - description='''This script is used for collecting logs from ac_aux ESPHome component. - For more info, see https://github.com/GrKoR/ac_python_logger''', - add_help = False) - parent_group = parser.add_argument_group (title='Params') - parent_group.add_argument ('--help', '-h', action='help', help='show this help message and exit') - parent_group.add_argument ('-i', '--ip', nargs=1, required=True, help='IP address of the esphome device') - parent_group.add_argument ('-p', '--pwd', nargs=1, required=True, help='native API password for the esphome device') - return parser - -async def main(): - """Connect to an ESPHome device and wait for state changes.""" - api = aioesphomeapi.APIClient(namespace.ip[0], 6053, namespace.pwd[0]) - - try: - await api.connect(login=True) - except aioesphomeapi.InvalidAuthAPIError as e: - return print(e) - - print(api.api_version) - - async def display_off(): - await api.execute_service( - service, - data={ - # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - "data_buf": [0xBB, 0x00, 0x06, 0x80, 0x01, 0x00, 0x0F, 0x00, 0x01, 0x01, 0x97, 0xE0, 0x00, 0x20, 0x00, 0xC0, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00], - } - ) - - async def display_on(): - await api.execute_service( - service, - data={ - # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - "data_buf": [0xBB, 0x00, 0x06, 0x80, 0x01, 0x00, 0x0F, 0x00, 0x01, 0x01, 0x97, 0xE0, 0x00, 0x20, 0x00, 0xC0, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00], - } - ) - - async def ac_enable(): - await api.execute_service( - service, - data={ - # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - "data_buf": [0xBB, 0x00, 0x06, 0x80, 0x00, 0x00, 0x0F, 0x00, 0x01, 0x00, 0x87, 0xE0, 0x2F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00], - } - ) - - async def ac_disable(): - await api.execute_service( - service, - data={ - # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - "data_buf": [0xBB, 0x00, 0x06, 0x80, 0x00, 0x00, 0x0F, 0x00, 0x01, 0x00, 0x87, 0xE0, 0x2F, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], - } - ) - - async def ac_get11_01(): - await api.execute_service( - service, - data={ - # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - "data_buf": [0xBB, 0x00, 0x06, 0x80, 0x00, 0x00, 0x02, 0x00, 0x11, 0x01], - } - ) - - async def ac_get11_00(): - await api.execute_service( - service, - data={ - # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - "data_buf": [0xBB, 0x00, 0x06, 0x80, 0x00, 0x00, 0x02, 0x00, 0x11, 0x00], - } - ) - - async def ac_set_vlouver(lvr): - await api.execute_service( - service, - data={ - # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - "data_buf": [0xBB, 0x00, 0x06, 0x80, 0x00, 0x00, 0x0F, 0x00, 0x01, 0x01, lvr, 0xE0, 0x00, 0x20, 0x00, 0xC0, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00], - } - ) - - async def ac_set_hlouver(lvr): - await api.execute_service( - service, - data={ - # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - "data_buf": [0xBB, 0x00, 0x06, 0x80, 0x00, 0x00, 0x0F, 0x00, 0x01, 0x01, 0x97, lvr, 0x00, 0x20, 0x00, 0xC0, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00], - } - ) - - # key надо искать в выводе list_entities_services - service = aioesphomeapi.UserService( - name="send_data", - key=311254518, - args=[ - aioesphomeapi.UserServiceArg(name="data_buf", type=aioesphomeapi.UserServiceArgType.INT_ARRAY), - ], - ) - - time.sleep(7) - await ac_get11_00() - time.sleep(7) - await ac_get11_01() - - #await ac_set_vlouver( 0b10010000 ) # swing on - #await ac_set_vlouver( 0b10010111 ) # swing off - #await ac_set_vlouver( 0b10010001 ) # 1 - #await ac_set_vlouver( 0b10010010 ) # 2 - #await ac_set_vlouver( 0b10010011 ) # 3 - #await ac_set_vlouver( 0b10010100 ) # 4 - #await ac_set_vlouver( 0b10010101 ) # 5 - #await ac_set_vlouver( 0b10010110 ) # не работает, сбрасывает на swing on - #time.sleep(5) - - #await ac_set_hlouver( 0b00000000 ) # swing on - #await ac_set_hlouver( 0b11100000 ) # swing off - #await ac_set_hlouver( 0b00100000 ) # не работает, сбрасывает в swing off - #await ac_set_hlouver( 0b01000000 ) # не работает, сбрасывает в swing off - #await ac_set_hlouver( 0b01100000 ) # не работает, сбрасывает в swing off - #await ac_set_hlouver( 0b10000000 ) # не работает, сбрасывает в swing off - #await ac_set_hlouver( 0b10100000 ) # не работает, сбрасывает в swing off - #await ac_set_hlouver( 0b11000000 ) # не работает, сбрасывает в swing off - #time.sleep(5) - - async def test_byte(bt): - await api.execute_service( - service, - data={ - #display on - # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - #"data_buf": [0xBB, 0x00, 0x06, 0x80, 0x00, 0x00, 0x0F, 0x00, 0x01, 0x01, 0x97, 0xE0, 0x00, 0x20, 0x00, 0xC0, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00], - #display off - # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - "data_buf": [0xBB, 0x00, 0x06, 0x80, 0x00, 0x00, 0x0F, 0x00, 0x01, 0x01, 0x97, 0xE0, 0x00, 0x20, 0x00, 0xC0, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00], - # swing on - # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - #"data_buf": [0xBB, 0x00, 0x06, 0x80, 0x00, 0x00, 0x0F, 0x00, 0x01, 0x01, 0x90, 0xE0, 0x00, 0x20, 0x00, 0xC0, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00], - # swing off - # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - #"data_buf": [0xBB, 0x00, 0x06, 0x80, 0x00, 0x00, 0x0F, 0x00, 0x01, 0x01, 0x97, 0xE0, 0x00, 0x20, 0x00, 0xC0, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00], - } - ) - ''' - не проходит команда, если байт 1 или 7 не 0x00 - не проходит команда, если байт 3 не 0x80 - - проходит и не меняется, если меняю байт 4 или 5 - ''' - - #await test_byte(0b10000110) - #await test_byte(0b01000110) - #await test_byte(0b00100110) - #await test_byte(0b00010110) - time.sleep(2) - - -parser = createParser() -namespace = parser.parse_args() -print("IP: ", namespace.ip[0]) - - -loop = asyncio.get_event_loop() -try: - #asyncio.ensure_future(main()) - #loop.run_forever() - loop.run_until_complete(main()) -except aioesphomeapi.InvalidAuthAPIError as e: - print(e) -except KeyboardInterrupt: - pass -finally: - loop.close() - pass \ No newline at end of file diff --git a/tests/test-ext-esp32.yaml b/tests/test-ext-esp32.yaml deleted file mode 100644 index 13ffe7e..0000000 --- a/tests/test-ext-esp32.yaml +++ /dev/null @@ -1,122 +0,0 @@ -external_components: - - source: github://GrKoR/esphome_aux_ac_component@dev - components: [ aux_ac ] - refresh: 0s - -substitutions: - devicename: test_aux_ac_ext_esp32 - upper_devicename: Test AUX - -esphome: - name: $devicename - platform: ESP32 - board: nodemcu-32s - -wifi: - ssid: !secret wifi_ssid - password: !secret wifi_pass - manual_ip: - static_ip: 192.168.0.151 # Для примера - gateway: !secret wifi_gateway - subnet: !secret wifi_subnet - dns1: 8.8.8.8 - dns2: 1.1.1.1 - reboot_timeout: 0s - ap: - ssid: Test AUX Fallback Hotspot - password: !secret wifi_ap_pass - -logger: - level: DEBUG - baud_rate: 0 - -api: - password: !secret api_pass - reboot_timeout: 0s - -ota: - - platform: esphome - password: !secret ota_pass - -uart: - id: ac_uart_bus - #tx_pin: GPIO1 - #rx_pin: GPIO3 - tx_pin: TX - rx_pin: RX - baud_rate: 4800 - data_bits: 8 - parity: EVEN - stop_bits: 1 - -sensor: - - platform: uptime - name: Uptime Sensor - -climate: - - platform: aux_ac - name: $upper_devicename - id: aux_id - uart_id: ac_uart_bus - period: 7s - show_action: true - display_inverted: true - indoor_temperature: - name: $upper_devicename Indoor Temperature - id: ${devicename}_indoor_temp - internal: false - display_state: - name: $upper_devicename Display State - id: ${devicename}_display_state - internal: false - outdoor_temperature: - name: $upper_devicename Outdoor Temperature - id: ${devicename}_outdoor_temp - internal: false - outbound_temperature: - name: $upper_devicename Coolant Outbound Temperature - id: ${devicename}_outbound_temp - internal: false - inbound_temperature: - name: $upper_devicename Coolant Inbound Temperature - id: ${devicename}_inbound_temp - internal: false - compressor_temperature: - name: $upper_devicename Compressor Temperature - id: ${devicename}_strange_temp - internal: false - defrost_state: - name: $upper_devicename Defrost State - id: ${devicename}_defrost_state - internal: false - inverter_power: - name: $upper_devicename Invertor Power - id: ${devicename}_invertor_power - internal: false - preset_reporter: - name: $upper_devicename Preset Reporter - id: ${devicename}_preset_reporter - internal: false - visual: - min_temperature: 16 - max_temperature: 32 - temperature_step: 0.5 - supported_modes: - - HEAT_COOL - - COOL - - HEAT - - DRY - - FAN_ONLY - custom_fan_modes: - - MUTE - - TURBO - supported_presets: - - SLEEP - custom_presets: - - CLEAN - - HEALTH - - ANTIFUNGUS - supported_swing_modes: - - VERTICAL - - HORIZONTAL - - BOTH diff --git a/tests/test-ext-for-engineer.yaml b/tests/test-ext-for-engineer.yaml deleted file mode 100644 index 465dbf2..0000000 --- a/tests/test-ext-for-engineer.yaml +++ /dev/null @@ -1,157 +0,0 @@ -external_components: - - source: github://GrKoR/esphome_aux_ac_component@dev - components: [ aux_ac ] - refresh: 0s - -substitutions: - devicename: test_aux_ac_ext_engeneer - upper_devicename: Test AUX - -esphome: - name: $devicename - platform: ESP8266 - board: esp12e - -wifi: - ssid: !secret wifi_ssid - password: !secret wifi_pass - manual_ip: - static_ip: !secret wifi_ip - gateway: !secret wifi_gateway - subnet: !secret wifi_subnet - dns1: 8.8.8.8 - dns2: 1.1.1.1 - reboot_timeout: 0s - ap: - ssid: Test AUX Fallback Hotspot - password: !secret wifi_ap_pass - -logger: - level: DEBUG - baud_rate: 0 - -api: - password: !secret api_pass - reboot_timeout: 0s - services: - # этот сервис можно вызвать из Home Assistant или Python. Он отправляет полученные байты в кондиционер - - service: send_data - variables: - data_buf: int[] - then: - # ВАЖНО! Только для инженеров! - # Вызывайте метод aux_ac.send_packet только если понимаете, что делаете! Он не проверяет данные, а передаёт - # кондиционеру всё как есть. Какой эффект получится от передачи кондиционеру рандомных байт, никто не знает. - # Вы действуете на свой страх и риск. - - aux_ac.send_packet: - id: aux_id - data: !lambda |- - std::vector data{}; - for (int n : data_buf) { - data.push_back( (uint8_t) n ); - } - return data; - -ota: - - platform: esphome - password: !secret ota_pass - -web_server: - port: 80 - -uart: - id: ac_uart_bus - tx_pin: GPIO1 - rx_pin: GPIO3 - baud_rate: 4800 - data_bits: 8 - parity: EVEN - stop_bits: 1 - -sensor: - - platform: uptime - name: Uptime Sensor - -climate: - - platform: aux_ac - name: $upper_devicename - id: aux_id - uart_id: ac_uart_bus - period: 7s - show_action: true - display_inverted: true - optimistic: true - indoor_temperature: - name: $upper_devicename Indoor Temperature - id: ${devicename}_indoor_temp - internal: false - display_state: - name: $upper_devicename Display State - id: ${devicename}_display_state - internal: false - outdoor_temperature: - name: $upper_devicename Outdoor Temperature - id: ${devicename}_outdoor_temp - internal: false - outbound_temperature: - name: $upper_devicename Coolant Outbound Temperature - id: ${devicename}_outbound_temp - internal: false - inbound_temperature: - name: $upper_devicename Coolant Inbound Temperature - id: ${devicename}_inbound_temp - internal: false - compressor_temperature: - name: $upper_devicename Compressor Temperature - id: ${devicename}_strange_temp - internal: false - defrost_state: - name: $upper_devicename Defrost State - id: ${devicename}_defrost_state - internal: false - inverter_power: - name: $upper_devicename Invertor Power - id: ${devicename}_invertor_power - internal: false - preset_reporter: - name: $upper_devicename Preset Reporter - id: ${devicename}_preset_reporter - internal: false - visual: - min_temperature: 16 - max_temperature: 32 - temperature_step: 0.5 - supported_modes: - - HEAT_COOL - - COOL - - HEAT - - DRY - - FAN_ONLY - custom_fan_modes: - - MUTE - - TURBO - supported_presets: - - SLEEP - custom_presets: - - CLEAN - - HEALTH - - ANTIFUNGUS - supported_swing_modes: - - VERTICAL - - HORIZONTAL - - BOTH - - -switch: - - platform: template - name: AC Display - lambda: |- - if (id(${devicename}_display_state).state) { - return true; - } else { - return false; - } - turn_on_action: - - aux_ac.display_on: aux_id - turn_off_action: - - aux_ac.display_off: aux_id \ No newline at end of file diff --git a/tests/test-ext-power-limit.yaml b/tests/test-ext-power-limit.yaml deleted file mode 100644 index c50079a..0000000 --- a/tests/test-ext-power-limit.yaml +++ /dev/null @@ -1,163 +0,0 @@ -external_components: - - source: github://GrKoR/esphome_aux_ac_component@dev - components: [ aux_ac ] - refresh: 0s - -substitutions: - devicename: test_ext_power_limitations - upper_devicename: Test AUX - -esphome: - name: $devicename - platform: ESP8266 - board: esp12e - -wifi: - ssid: !secret wifi_ssid - password: !secret wifi_pass - manual_ip: - static_ip: !secret wifi_ip - gateway: !secret wifi_gateway - subnet: !secret wifi_subnet - dns1: 8.8.8.8 - dns2: 1.1.1.1 - reboot_timeout: 0s - ap: - ssid: Test AUX Fallback Hotspot - password: !secret wifi_ap_pass - -logger: - level: DEBUG - baud_rate: 0 - -api: - password: !secret api_pass - reboot_timeout: 0s - -ota: - - platform: esphome - password: !secret ota_pass - -web_server: - port: 80 - -uart: - id: ac_uart_bus - tx_pin: GPIO1 - rx_pin: GPIO3 - baud_rate: 4800 - data_bits: 8 - parity: EVEN - stop_bits: 1 - -sensor: - - platform: uptime - name: Uptime Sensor - -climate: - - platform: aux_ac - name: $upper_devicename - id: aux_id - uart_id: ac_uart_bus - period: 7s - show_action: true - display_inverted: true - timeout: 150 - indoor_temperature: - name: $upper_devicename Indoor Temperature - id: ${devicename}_indoor_temp - internal: false - display_state: - name: $upper_devicename Display State - id: ${devicename}_display_state - internal: false - outdoor_temperature: - name: $upper_devicename Outdoor Temperature - id: ${devicename}_outdoor_temp - internal: false - outbound_temperature: - name: $upper_devicename Coolant Outbound Temperature - id: ${devicename}_outbound_temp - internal: false - inbound_temperature: - name: $upper_devicename Coolant Inbound Temperature - id: ${devicename}_inbound_temp - internal: false - compressor_temperature: - name: $upper_devicename Compressor Temperature - id: ${devicename}_strange_temp - internal: false - defrost_state: - name: $upper_devicename Defrost State - id: ${devicename}_defrost_state - internal: false - inverter_power: - name: $upper_devicename Inverter Power - id: ${devicename}_invertor_power - internal: false - preset_reporter: - name: $upper_devicename Preset Reporter - id: ${devicename}_preset_reporter - internal: false - inverter_power_limit_value: - name: $upper_devicename Inverter Power Limit Value - id: ${devicename}_inverter_power_limit_value - internal: false - inverter_power_limit_state: - name: $upper_devicename Inverter Power Limit State - id: ${devicename}_inverter_power_limit_state - internal: false - visual: - min_temperature: 16 - max_temperature: 32 - temperature_step: 0.5 - supported_modes: - - HEAT_COOL - - COOL - - HEAT - - DRY - - FAN_ONLY - custom_fan_modes: - - MUTE - - TURBO - supported_presets: - - SLEEP - custom_presets: - - CLEAN - - HEALTH - - ANTIFUNGUS - supported_swing_modes: - - VERTICAL - - HORIZONTAL - - BOTH - - -button: - - platform: template - name: ${upper_devicename} IPower Limit Off - icon: "mdi:power-plug-off-outline" - on_press: - - aux_ac.power_limit_off: aux_id - - - platform: template - name: ${upper_devicename} IPower Limit On Half - icon: "mdi:fraction-one-half" - on_press: - - aux_ac.power_limit_on: - id: aux_id - limit: 50 - -number: - - platform: template - name: ${upper_devicename} IPower Limit Value - id: ${devicename}_ipower_limit_value - icon: "mdi:battery-unknown" - mode: "slider" - min_value: 30 - max_value: 100 - step: 1 - set_action: - then: - - lambda: !lambda |- - id(aux_id).powerLimitationOnSequence( x ); - diff --git a/tests/test-local-airflow-dir.yaml b/tests/test-local-airflow-dir.yaml deleted file mode 100644 index 2981e80..0000000 --- a/tests/test-local-airflow-dir.yaml +++ /dev/null @@ -1,126 +0,0 @@ -external_components: - - source: - type: local - path: ../components - -substitutions: - devicename: test_local_airflow_dir - upper_devicename: Test AUX - -esphome: - name: $devicename - platform: ESP8266 - board: esp12e - -wifi: - ssid: !secret wifi_ssid - password: !secret wifi_pass - manual_ip: - static_ip: !secret wifi_ip - gateway: !secret wifi_gateway - subnet: !secret wifi_subnet - dns1: 8.8.8.8 - dns2: 1.1.1.1 - reboot_timeout: 0s - ap: - ssid: $upper_devicename Fallback Hotspot - password: !secret wifi_ap_pass - -logger: - level: DEBUG - baud_rate: 0 - -api: - password: !secret api_pass - reboot_timeout: 0s - -ota: - - platform: esphome - password: !secret ota_pass - -web_server: - port: 80 - -uart: - id: ac_uart_bus - tx_pin: GPIO1 - rx_pin: GPIO3 - baud_rate: 4800 - data_bits: 8 - parity: EVEN - stop_bits: 1 - - -sensor: - - platform: uptime - name: Uptime Sensor - - -climate: - - platform: aux_ac - name: $upper_devicename - id: aux_id - uart_id: ac_uart_bus - period: 7s - show_action: true - display_inverted: true - - -button: - - platform: template - name: ${upper_devicename} VLouver Stop - icon: "mdi:circle-small" - on_press: - - aux_ac.vlouver_stop: aux_id - - - platform: template - name: ${upper_devicename} VLouver Swing - icon: "mdi:pan-vertical" - on_press: - - aux_ac.vlouver_swing: aux_id - - - platform: template - name: ${upper_devicename} VLouver Top - icon: "mdi:pan-up" - on_press: - - aux_ac.vlouver_top: aux_id - - - platform: template - name: ${upper_devicename} VLouver Middle Above - icon: "mdi:pan-top-left" - on_press: - - aux_ac.vlouver_middle_above: aux_id - - - platform: template - name: ${upper_devicename} VLouver Middle - icon: "mdi:pan-left" - on_press: - - aux_ac.vlouver_middle: aux_id - - - platform: template - name: ${upper_devicename} VLouver Middle Below - icon: "mdi:pan-bottom-left" - on_press: - - aux_ac.vlouver_middle_below: aux_id - - - platform: template - name: ${upper_devicename} VLouver Bottom - icon: "mdi:pan-down" - on_press: - - aux_ac.vlouver_bottom: aux_id - - -number: - - platform: template - name: ${upper_devicename} Vertical Louver - id: ${devicename}_vlouver - icon: "mdi:circle-small" - mode: "slider" - min_value: 0 - max_value: 6 - step: 1 - set_action: - then: - - lambda: !lambda |- - if (x == 6) x = 7; // делаем так, чтобы выключение отрабатывать корректно - id(aux_id).setVLouverSequence( static_cast(x) ); diff --git a/tests/test-local-power-limit.yaml b/tests/test-local-power-limit.yaml deleted file mode 100644 index 655bc80..0000000 --- a/tests/test-local-power-limit.yaml +++ /dev/null @@ -1,163 +0,0 @@ -external_components: - - source: - type: local - path: ../components - -substitutions: - devicename: test_local_power_limitations - upper_devicename: Test AUX - -esphome: - name: $devicename - platform: ESP8266 - board: esp12e - -wifi: - ssid: !secret wifi_ssid - password: !secret wifi_pass - manual_ip: - static_ip: !secret wifi_ip - gateway: !secret wifi_gateway - subnet: !secret wifi_subnet - dns1: 8.8.8.8 - dns2: 1.1.1.1 - reboot_timeout: 0s - ap: - ssid: Test AUX Fallback Hotspot - password: !secret wifi_ap_pass - -logger: - level: DEBUG - baud_rate: 0 - -api: - password: !secret api_pass - reboot_timeout: 0s - -ota: - - platform: esphome - password: !secret ota_pass - -web_server: - port: 80 - -uart: - id: ac_uart_bus - tx_pin: GPIO1 - rx_pin: GPIO3 - baud_rate: 4800 - data_bits: 8 - parity: EVEN - stop_bits: 1 - -sensor: - - platform: uptime - name: Uptime Sensor - -climate: - - platform: aux_ac - name: $upper_devicename - id: aux_id - uart_id: ac_uart_bus - period: 7s - show_action: true - display_inverted: true - timeout: 150 - indoor_temperature: - name: $upper_devicename Indoor Temperature - id: ${devicename}_indoor_temp - internal: false - display_state: - name: $upper_devicename Display State - id: ${devicename}_display_state - internal: false - outdoor_temperature: - name: $upper_devicename Outdoor Temperature - id: ${devicename}_outdoor_temp - internal: false - outbound_temperature: - name: $upper_devicename Coolant Outbound Temperature - id: ${devicename}_outbound_temp - internal: false - inbound_temperature: - name: $upper_devicename Coolant Inbound Temperature - id: ${devicename}_inbound_temp - internal: false - compressor_temperature: - name: $upper_devicename Compressor Temperature - id: ${devicename}_strange_temp - internal: false - defrost_state: - name: $upper_devicename Defrost State - id: ${devicename}_defrost_state - internal: false - inverter_power: - name: $upper_devicename Inverter Power - id: ${devicename}_invertor_power - internal: false - preset_reporter: - name: $upper_devicename Preset Reporter - id: ${devicename}_preset_reporter - internal: false - inverter_power_limit_value: - name: $upper_devicename Inverter Power Limit Value - id: ${devicename}_inverter_power_limit_value - internal: false - inverter_power_limit_state: - name: $upper_devicename Inverter Power Limit State - id: ${devicename}_inverter_power_limit_state - internal: false - visual: - min_temperature: 16 - max_temperature: 32 - temperature_step: 0.5 - supported_modes: - - HEAT_COOL - - COOL - - HEAT - - DRY - - FAN_ONLY - custom_fan_modes: - - MUTE - - TURBO - supported_presets: - - SLEEP - custom_presets: - - CLEAN - - HEALTH - - ANTIFUNGUS - supported_swing_modes: - - VERTICAL - - HORIZONTAL - - BOTH - - -button: - - platform: template - name: ${upper_devicename} IPower Limit Off - icon: "mdi:power-plug-off-outline" - on_press: - - aux_ac.power_limit_off: aux_id - - - platform: template - name: ${upper_devicename} IPower Limit On Half - icon: "mdi:fraction-one-half" - on_press: - - aux_ac.power_limit_on: - id: aux_id - limit: 50 - -number: - - platform: template - name: ${upper_devicename} IPower Limit Value - id: ${devicename}_ipower_limit_value - icon: "mdi:battery-unknown" - mode: "slider" - min_value: 30 - max_value: 100 - step: 1 - set_action: - then: - - lambda: !lambda |- - id(aux_id).powerLimitationOnSequence( x ); - diff --git a/tests/test-local.yaml b/tests/test-local.yaml deleted file mode 100644 index 068b424..0000000 --- a/tests/test-local.yaml +++ /dev/null @@ -1,124 +0,0 @@ -external_components: - - source: - type: local - path: ../components - -substitutions: - devicename: test_local_airflow_dir - upper_devicename: Test AUX - -esphome: - name: $devicename - platform: ESP8266 - board: esp12e - -wifi: - ssid: !secret wifi_ssid - password: !secret wifi_pass - manual_ip: - static_ip: !secret wifi_ip - gateway: !secret wifi_gateway - subnet: !secret wifi_subnet - dns1: 8.8.8.8 - dns2: 1.1.1.1 - reboot_timeout: 0s - ap: - ssid: Test AUX Fallback Hotspot - password: !secret wifi_ap_pass - -logger: - level: DEBUG - baud_rate: 0 - -api: - password: !secret api_pass - reboot_timeout: 0s - -ota: - - platform: esphome - password: !secret ota_pass - -web_server: - port: 80 - -uart: - id: ac_uart_bus - tx_pin: GPIO1 - rx_pin: GPIO3 - baud_rate: 4800 - data_bits: 8 - parity: EVEN - stop_bits: 1 - -sensor: - - platform: uptime - name: Uptime Sensor - -climate: - - platform: aux_ac - name: $upper_devicename - id: aux_id - uart_id: ac_uart_bus - period: 7s - show_action: true - display_inverted: true - optimistic: true - indoor_temperature: - name: $upper_devicename Indoor Temperature - id: ${devicename}_indoor_temp - internal: false - display_state: - name: $upper_devicename Display State - id: ${devicename}_display_state - internal: false - outdoor_temperature: - name: $upper_devicename Outdoor Temperature - id: ${devicename}_outdoor_temp - internal: false - outbound_temperature: - name: $upper_devicename Coolant Outbound Temperature - id: ${devicename}_outbound_temp - internal: false - inbound_temperature: - name: $upper_devicename Coolant Inbound Temperature - id: ${devicename}_inbound_temp - internal: false - compressor_temperature: - name: $upper_devicename Compressor Temperature - id: ${devicename}_strange_temp - internal: false - defrost_state: - name: $upper_devicename Defrost State - id: ${devicename}_defrost_state - internal: false - inverter_power: - name: $upper_devicename Invertor Power - id: ${devicename}_invertor_power - internal: false - preset_reporter: - name: $upper_devicename Preset Reporter - id: ${devicename}_preset_reporter - internal: false - visual: - min_temperature: 16 - max_temperature: 32 - temperature_step: 0.5 - supported_modes: - - HEAT_COOL - - COOL - - HEAT - - DRY - - FAN_ONLY - custom_fan_modes: - - MUTE - - TURBO - supported_presets: - - SLEEP - custom_presets: - - CLEAN - - HEALTH - - ANTIFUNGUS - supported_swing_modes: - - VERTICAL - - HORIZONTAL - - BOTH diff --git a/tests/test-minimal.yaml b/tests/test-minimal.yaml deleted file mode 100644 index 7df5756..0000000 --- a/tests/test-minimal.yaml +++ /dev/null @@ -1,49 +0,0 @@ -external_components: - - source: - type: local - path: ../components - #- source: github://GrKoR/esphome_aux_ac_component@dev - #components: [ aux_ac ] - #refresh: 0s - -substitutions: - devicename: test_local_minimal - upper_devicename: Test AUX - -esphome: - name: $devicename - platform: ESP8266 - board: esp12e - -wifi: - ssid: !secret wifi_ssid - password: !secret wifi_pass - reboot_timeout: 0s - ap: - ssid: $upper_devicename Fallback Hotspot - password: !secret wifi_ap_pass - -logger: - level: DEBUG - baud_rate: 0 - -api: - password: !secret api_pass - reboot_timeout: 0s - -ota: - - platform: esphome - password: !secret ota_pass - -uart: - id: ac_uart_bus - tx_pin: GPIO1 - rx_pin: GPIO3 - baud_rate: 4800 - data_bits: 8 - parity: EVEN - stop_bits: 1 - -climate: - - platform: aux_ac - name: $upper_devicename \ No newline at end of file