Skip to content

Commit 945d260

Browse files
authored
Merge pull request #173 from GrKoR/esp-idf-support
Esp idf support
2 parents 8dc9f0f + 6291828 commit 945d260

17 files changed

+57
-1149
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,5 @@
1212
**/livingroom_ac/
1313
**/kitchen_ac/
1414
/examples/*/*.h
15-
**/tests/test_*
1615
**/__pycache__
1716
**/private/

README-EN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ The best way to report about your test results is writing a message in the [tele
3636
For correct component operation, you need hardware and firmware. The hardware description is located [in a separate file](docs/HARDWARE-EN.md).
3737

3838
### Firmware: Integration aux_ac to your configuration ###
39-
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.
39+
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.
4040

4141
## Installing ##
4242
1. Declare external component. Read [the manual](https://esphome.io/components/external_components.html?highlight=external) for details.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ AUX - это один из нескольких OEM-производителей
4343
Для работы с кондиционером понадобится "железо" и прошивка. Описание электроники вынесено [в отдельный файл](docs/HARDWARE.md).
4444

4545
### Прошивка: интеграция aux_ac в вашу конфигурацию ESPHome ###
46-
Для использования требуется [ESPHome](https://esphome.io) версией не ниже 1.18.0. Именно в этой версии появились `external_components`. Но лучше использовать версию 1.20.4 или старше, так как до этой версии массированно исправлялись ошибки в механизме подключения внешних компонентов.<br />
46+
Для использования требуется [ESPHome](https://esphome.io) версией не ниже 2025.2.0. Работа с более ранними версиями возможна, но не гарантируется.<br />
4747

4848
## Установка ##
4949
1. Подключите компонент.

components/aux_ac/aux_ac.h

Lines changed: 44 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
/// немного переработанная версия старого компонента
55
#pragma once
66

7-
#include <Arduino.h>
87
#include <stdarg.h>
8+
#include <cinttypes>
99

1010
#include "esphome.h"
1111
#include "esphome/components/binary_sensor/binary_sensor.h"
@@ -16,6 +16,11 @@
1616
#include "esphome/core/component.h"
1717
#include "esphome/core/helpers.h"
1818

19+
#ifndef USE_ARDUINO
20+
using String = std::string;
21+
#define F(string_literal) (string_literal)
22+
#endif
23+
1924
// весь функционал сохранения пресетов прячу под дефайн
2025
// #define PRESETS_SAVING
2126
#ifdef PRESETS_SAVING
@@ -710,16 +715,16 @@ namespace esphome
710715
{
711716
AC_COMMAND_BASE;
712717
ac_health_status health_status;
713-
float temp_ambient; // внутренняя температура
714-
int8_t temp_outdoor; // внешняя температура
715-
int8_t temp_inbound; // температура входящая
716-
int8_t temp_outbound; // температура исходящая
717-
int8_t temp_compressor; // температура компрессора
718-
ac_realFan realFanSpeed; // текущая скорость вентилятора
719-
uint8_t inverter_power; // мощность инвертора
720-
bool defrost; // режим разморозки внешнего блока (накопление тепла + прогрев испарителя)
721-
ac_powLim_state power_lim_state; // статус ограничения мощности инвертора
722-
uint8_t power_lim_value; // значение ограничения мощности инвертора
718+
float temp_ambient; // внутренняя температура
719+
int8_t temp_outdoor; // внешняя температура
720+
int8_t temp_inbound; // температура входящая
721+
int8_t temp_outbound; // температура исходящая
722+
int8_t temp_compressor; // температура компрессора
723+
ac_realFan realFanSpeed; // текущая скорость вентилятора
724+
uint8_t inverter_power; // мощность инвертора
725+
bool defrost; // режим разморозки внешнего блока (накопление тепла + прогрев испарителя)
726+
ac_powLim_state power_lim_state; // статус ограничения мощности инвертора
727+
uint8_t power_lim_value; // значение ограничения мощности инвертора
723728
};
724729

725730
typedef ac_command_t ac_state_t; // текущее состояние параметров кондея можно хранить в таком же формате, как и комманды
@@ -1520,15 +1525,15 @@ namespace esphome
15201525
stateByte = small_info_body->display_and_mildew & AC_MILDEW_MASK;
15211526
stateChangedFlag = stateChangedFlag || (_current_ac_state.mildew != (ac_mildew)stateByte);
15221527
_current_ac_state.mildew = (ac_mildew)stateByte;
1523-
1528+
15241529
stateByte = AC_POWLIMSTAT_ON * small_info_body->inverter_power_limitation_enable;
15251530
stateChangedFlag = stateChangedFlag || (_current_ac_state.power_lim_state != (ac_powLim_state)stateByte);
1526-
_current_ac_state.power_lim_state = (ac_powLim_state)stateByte;
1527-
1531+
_current_ac_state.power_lim_state = (ac_powLim_state)stateByte;
1532+
15281533
stateByte = small_info_body->inverter_power_limitation_value;
15291534
stateChangedFlag = stateChangedFlag || (_current_ac_state.power_lim_value != stateByte);
15301535
_current_ac_state.power_lim_value = stateByte;
1531-
1536+
15321537
// уведомляем об изменении статуса сплита
15331538
if (stateChangedFlag)
15341539
stateChanged();
@@ -1710,7 +1715,7 @@ namespace esphome
17101715

17111716
// заполняем время получения пакета
17121717
memset(textBuf, 0, 11);
1713-
sprintf(textBuf, "%010u", packet->msec);
1718+
sprintf(textBuf, "%010" PRIu32, packet->msec);
17141719
st = st + textBuf + ": ";
17151720

17161721
// формируем преамбулы
@@ -2839,11 +2844,11 @@ namespace esphome
28392844
{
28402845
ESP_LOGCONFIG(TAG, "AUX HVAC:");
28412846
ESP_LOGCONFIG(TAG, " [x] Firmware version: %s", Constants::AC_FIRMWARE_VERSION.c_str());
2842-
ESP_LOGCONFIG(TAG, " [x] Period: %dms", this->get_period());
2847+
ESP_LOGCONFIG(TAG, " [x] Period: %" PRIu32 "ms", this->get_period());
28432848
ESP_LOGCONFIG(TAG, " [x] Show action: %s", TRUEFALSE(this->get_show_action()));
28442849
ESP_LOGCONFIG(TAG, " [x] Display inverted: %s", TRUEFALSE(this->get_display_inverted()));
28452850
ESP_LOGCONFIG(TAG, " [x] Optimistic: %s", TRUEFALSE(this->get_optimistic()));
2846-
ESP_LOGCONFIG(TAG, " [x] Packet timeout: %dms", this->get_packet_timeout());
2851+
ESP_LOGCONFIG(TAG, " [x] Packet timeout: %" PRIu32 "ms", this->get_packet_timeout());
28472852

28482853
#if defined(PRESETS_SAVING)
28492854
ESP_LOGCONFIG(TAG, " [x] Save settings %s", TRUEFALSE(this->get_store_settings()));
@@ -3545,7 +3550,7 @@ namespace esphome
35453550
}
35463551

35473552
// устанавливает ограничение мощности сплита на нужный уровень
3548-
bool powerLimitationSetSequence(uint8_t power_limit, bool set_on=false)
3553+
bool powerLimitationSetSequence(uint8_t power_limit, bool set_on = false)
35493554
{
35503555
// нет смысла в последовательности, если нет коннекта с кондиционером
35513556
if (!get_has_connection())
@@ -3560,12 +3565,12 @@ namespace esphome
35603565
return false;
35613566
}
35623567

3563-
if(power_limit != this->_power_limitation_value_normalise(power_limit))
3568+
if (power_limit != this->_power_limitation_value_normalise(power_limit))
35643569
{
35653570
_debugMsg(F("powerLimitationSetSequence: incorrect power limit value."), ESPHOME_LOG_LEVEL_WARN, __LINE__);
35663571
return false;
35673572
}
3568-
3573+
35693574
// формируем команду
35703575
ac_command_t cmd;
35713576
_clearCommand(&cmd); // не забываем очищать, а то будет мусор
@@ -3577,12 +3582,14 @@ namespace esphome
35773582
// добавляем команду в последовательность
35783583
if (!commandSequence(&cmd))
35793584
return false;
3580-
3585+
35813586
if (set_on)
35823587
{
3583-
_debugMsg(F("powerLimitationSetSequence: loaded (state = %02X, power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, cmd.power_lim_state, power_limit);
3584-
} else {
3585-
_debugMsg(F("powerLimitationSetSequence: loaded (power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, power_limit);
3588+
_debugMsg(F("powerLimitationSetSequence: loaded (state = %02X, power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, cmd.power_lim_state, power_limit);
3589+
}
3590+
else
3591+
{
3592+
_debugMsg(F("powerLimitationSetSequence: loaded (power limit = %02X)"), ESPHOME_LOG_LEVEL_VERBOSE, __LINE__, power_limit);
35863593
}
35873594
return true;
35883595
}
@@ -3602,14 +3609,17 @@ namespace esphome
36023609
_debugMsg(F("powerLimitationOnSequence: unsupported for noninverter AC."), ESPHOME_LOG_LEVEL_WARN, __LINE__);
36033610
return false; // если кондиционер не инверторный, то выходим
36043611
}
3605-
3612+
36063613
// формируем команду
36073614
ac_command_t cmd;
36083615
_clearCommand(&cmd); // не забываем очищать, а то будет мусор
3609-
if(enable_limit){
3610-
cmd.power_lim_state = AC_POWLIMSTAT_ON; // включить ограничение мощности
3611-
} else {
3612-
cmd.power_lim_state = AC_POWLIMSTAT_OFF; // отключить ограничение мощности
3616+
if (enable_limit)
3617+
{
3618+
cmd.power_lim_state = AC_POWLIMSTAT_ON; // включить ограничение мощности
3619+
}
3620+
else
3621+
{
3622+
cmd.power_lim_state = AC_POWLIMSTAT_OFF; // отключить ограничение мощности
36133623
}
36143624
// добавляем команду в последовательность
36153625
if (!commandSequence(&cmd))
@@ -3622,19 +3632,19 @@ namespace esphome
36223632
// включает ограничение мощности сплита
36233633
bool powerLimitationOnSequence()
36243634
{
3625-
return powerLimitationOnOffSequence(true);
3635+
return powerLimitationOnOffSequence(true);
36263636
}
36273637

36283638
// включает ограничение мощности сплита на нужный уровень
36293639
bool powerLimitationOnSequence(uint8_t power_limit)
36303640
{
3631-
return powerLimitationSetSequence(power_limit, true);
3641+
return powerLimitationSetSequence(power_limit, true);
36323642
}
3633-
3643+
36343644
// выключает ограничение мощности сплита
36353645
bool powerLimitationOffSequence()
36363646
{
3637-
return powerLimitationOnOffSequence(false);
3647+
return powerLimitationOnOffSequence(false);
36383648
}
36393649

36403650
// конвертирует состояние жалюзи из кодов сплита в коды для фронтенда

components/aux_ac/climate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
ClimateSwingMode,
3434
)
3535

36-
AUX_AC_FIRMWARE_VERSION = '0.2.15'
36+
AUX_AC_FIRMWARE_VERSION = '0.2.16'
3737
AC_PACKET_TIMEOUT_MIN = 150
3838
AC_PACKET_TIMEOUT_MAX = 600
3939
AC_POWER_LIMIT_MIN = 30

docs/AC_TESTED.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
`Aux_ac` has been tested and works successfully with the air conditioners from the list below.<br/>
33
Кондиционеры из списка ниже протестированы и точно совместимы с `aux_ac`.
44

5-
+ ANDE (models: AND-12/FA+)
5+
+ ANDE (models: AND-12/FA+, AND-AMWM-H12(JA) / AND-AM2-H18/4DR3)
66
+ Argo (models: Greenstyle 9000, Greenstyle 12000, Greenstyle 18000)
7-
+ 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)
7+
+ Arielli (models: ASW-H09B4/FGR3DI-EU)
8+
+ 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)
89
+ 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)
9-
+ Baymak (models: Elegant Plus 12)
10+
+ Baymak (models: Elegant Plus 9, Elegant Plus 12)
1011
+ 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)
12+
+ Costway (models: FP10318US-22WH, FP10524US-22WH)
1113
+ Dimstal (model: SMND-QC-12-J-Smart ECO)
1214
+ Electrolux (models: EACS/I-07HSK/N3, EACS/I-09HIX-BLACK/N8)
1315
+ Elgin (models: HIFI09C2WA / HIFE09C2CA, HJFI12C2WB, HWFI09B2IA / HWFE09B2NA)
@@ -18,7 +20,7 @@
1820
+ Idea (models: ISR-12HR-SA7-DN1 ION)
1921
+ IGC (models: RAK-07NH multysplit, RAS-07AX/RAC-07AX, RAS-V09N2X/RAC-V09N2X, RAS-V12NQR/RAC-V12NQR)
2022
+ IKON (models: ASW-H12C5C4/HCR3DI-B8)
21-
+ Ishimatsu (models: AVK-09I)
23+
+ Ishimatsu (models: AVK-07I, AVK-09I)
2224
+ Loriot (models: LAC-09AS)
2325
+ Mirage (models: EWC121E - CWC121E)
2426
+ Osaka (models: STVP-12HH3)

examples/advanced/ac_common.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ external_components:
77

88
esphome:
99
name: $devicename
10-
platform: ESP8266
10+
11+
esp8266:
1112
board: esp12e
1213

1314
wifi:

examples/simple/aux_ac_simple.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ external_components:
55

66
esphome:
77
name: aux_air_conditioner
8-
platform: ESP8266
8+
9+
esp8266:
910
board: esp12e
1011

1112
# don't forget to set your's wifi settings!

tests/.gitignore

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)