mirror of
https://github.com/GrKoR/esphome_aux_ac_component.git
synced 2025-12-07 03:57:02 +03:00
indoor ambient temperature sensor was lost when external component realized
Fixes #13
This commit is contained in:
@@ -1550,12 +1550,13 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
return relevant;
|
return relevant;
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
|
||||||
// сенсоры, отображающие параметры сплита
|
// сенсоры, отображающие параметры сплита
|
||||||
esphome::sensor::Sensor *sensor_ambient_temperature = new esphome::sensor::Sensor();
|
//esphome::sensor::Sensor *sensor_indoor_temperature = new esphome::sensor::Sensor();
|
||||||
|
esphome::sensor::Sensor *sensor_indoor_temperature_ = nullptr;
|
||||||
// TODO: если расшифруем формулу для уличной температуры, то можно будет вернуть
|
// TODO: если расшифруем формулу для уличной температуры, то можно будет вернуть
|
||||||
//esphome::sensor::Sensor *sensor_outdoor_temperature = new esphome::sensor::Sensor();
|
//esphome::sensor::Sensor *sensor_outdoor_temperature = new esphome::sensor::Sensor();
|
||||||
|
|
||||||
|
public:
|
||||||
AirCon(){ initAC(); };
|
AirCon(){ initAC(); };
|
||||||
|
|
||||||
AirCon(esphome::uart::UARTComponent *parent) { initAC(parent); };
|
AirCon(esphome::uart::UARTComponent *parent) { initAC(parent); };
|
||||||
@@ -1583,6 +1584,8 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
|
|
||||||
float get_setup_priority() const override { return esphome::setup_priority::DATA; }
|
float get_setup_priority() const override { return esphome::setup_priority::DATA; }
|
||||||
|
|
||||||
|
void set_indoor_temperature_sensor(sensor::Sensor *temperature_sensor) { sensor_indoor_temperature_ = temperature_sensor; }
|
||||||
|
|
||||||
bool get_hw_initialized(){ return _hw_initialized; };
|
bool get_hw_initialized(){ return _hw_initialized; };
|
||||||
bool get_has_connection(){ return _has_connection; };
|
bool get_has_connection(){ return _has_connection; };
|
||||||
|
|
||||||
@@ -1825,7 +1828,8 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
/*********************************************************************/
|
/*********************************************************************/
|
||||||
this->publish_state();
|
this->publish_state();
|
||||||
// температура в комнате
|
// температура в комнате
|
||||||
sensor_ambient_temperature->publish_state(_current_ac_state.temp_ambient);
|
if (sensor_indoor_temperature_ != nullptr)
|
||||||
|
sensor_indoor_temperature_->publish_state(_current_ac_state.temp_ambient);
|
||||||
// температура уличного блока
|
// температура уличного блока
|
||||||
// TODO: если расшифруем формулу для уличной температуры, то можно будет вернуть
|
// TODO: если расшифруем формулу для уличной температуры, то можно будет вернуть
|
||||||
//sensor_outdoor_temperature->publish_state(_current_ac_state.temp_outdoor);
|
//sensor_outdoor_temperature->publish_state(_current_ac_state.temp_outdoor);
|
||||||
@@ -1836,7 +1840,26 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
|||||||
ESP_LOGCONFIG(Constants::TAG, "AUX HVAC:");
|
ESP_LOGCONFIG(Constants::TAG, "AUX HVAC:");
|
||||||
ESP_LOGCONFIG(Constants::TAG, " [x] Period: %dms", this->get_period());
|
ESP_LOGCONFIG(Constants::TAG, " [x] Period: %dms", this->get_period());
|
||||||
ESP_LOGCONFIG(Constants::TAG, " [x] Show action: %s", this->get_show_action() ? "true" : "false");
|
ESP_LOGCONFIG(Constants::TAG, " [x] Show action: %s", this->get_show_action() ? "true" : "false");
|
||||||
|
if ((this->sensor_indoor_temperature_) != nullptr) {
|
||||||
|
ESP_LOGCONFIG(Constants::TAG, "%s%s '%s'", " ", LOG_STR_LITERAL("Indoor Temperature"), (this->sensor_indoor_temperature_)->get_name().c_str());
|
||||||
|
if (!(this->sensor_indoor_temperature_)->get_device_class().empty()) {
|
||||||
|
ESP_LOGCONFIG(Constants::TAG, "%s Device Class: '%s'", " ", (this->sensor_indoor_temperature_)->get_device_class().c_str());
|
||||||
|
}
|
||||||
|
ESP_LOGCONFIG(Constants::TAG, "%s State Class: '%s'", " ", state_class_to_string((this->sensor_indoor_temperature_)->get_state_class()).c_str());
|
||||||
|
ESP_LOGCONFIG(Constants::TAG, "%s Unit of Measurement: '%s'", " ", (this->sensor_indoor_temperature_)->get_unit_of_measurement().c_str());
|
||||||
|
ESP_LOGCONFIG(Constants::TAG, "%s Accuracy Decimals: %d", " ", (this->sensor_indoor_temperature_)->get_accuracy_decimals());
|
||||||
|
if (!(this->sensor_indoor_temperature_)->get_icon().empty()) {
|
||||||
|
ESP_LOGCONFIG(Constants::TAG, "%s Icon: '%s'", " ", (this->sensor_indoor_temperature_)->get_icon().c_str());
|
||||||
|
}
|
||||||
|
if (!(this->sensor_indoor_temperature_)->unique_id().empty()) {
|
||||||
|
ESP_LOGV(Constants::TAG, "%s Unique ID: '%s'", " ", (this->sensor_indoor_temperature_)->unique_id().c_str());
|
||||||
|
}
|
||||||
|
if ((this->sensor_indoor_temperature_)->get_force_update()) {
|
||||||
|
ESP_LOGV(Constants::TAG, "%s Force Update: YES", " ");
|
||||||
|
}
|
||||||
|
}
|
||||||
this->dump_traits_(Constants::TAG);
|
this->dump_traits_(Constants::TAG);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// вызывается пользователем из интерфейса ESPHome или Home Assistant
|
// вызывается пользователем из интерфейса ESPHome или Home Assistant
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
import logging
|
import logging
|
||||||
import esphome.config_validation as cv
|
import esphome.config_validation as cv
|
||||||
import esphome.codegen as cg
|
import esphome.codegen as cg
|
||||||
from esphome.components import climate, uart
|
from esphome.components import climate, uart, sensor
|
||||||
from esphome.const import (
|
from esphome.const import (
|
||||||
CONF_ID,
|
CONF_ID,
|
||||||
CONF_NAME,
|
|
||||||
CONF_UART_ID,
|
CONF_UART_ID,
|
||||||
CONF_PERIOD,
|
CONF_PERIOD,
|
||||||
CONF_CUSTOM_FAN_MODES,
|
CONF_CUSTOM_FAN_MODES,
|
||||||
CONF_CUSTOM_PRESETS
|
CONF_CUSTOM_PRESETS,
|
||||||
|
CONF_INTERNAL,
|
||||||
|
UNIT_CELSIUS,
|
||||||
|
DEVICE_CLASS_TEMPERATURE,
|
||||||
|
STATE_CLASS_MEASUREMENT,
|
||||||
)
|
)
|
||||||
from esphome.components.climate import (
|
from esphome.components.climate import (
|
||||||
ClimateMode,
|
ClimateMode,
|
||||||
@@ -24,6 +27,7 @@ CONF_SUPPORTED_MODES = 'supported_modes'
|
|||||||
CONF_SUPPORTED_SWING_MODES = 'supported_swing_modes'
|
CONF_SUPPORTED_SWING_MODES = 'supported_swing_modes'
|
||||||
CONF_SUPPORTED_PRESETS = 'supported_presets'
|
CONF_SUPPORTED_PRESETS = 'supported_presets'
|
||||||
CONF_SHOW_ACTION = 'show_action'
|
CONF_SHOW_ACTION = 'show_action'
|
||||||
|
CONF_INDOOR_TEMPERATURE = 'indoor_temperature'
|
||||||
|
|
||||||
aux_ac_ns = cg.esphome_ns.namespace("aux_ac")
|
aux_ac_ns = cg.esphome_ns.namespace("aux_ac")
|
||||||
AirCon = aux_ac_ns.class_("AirCon", climate.Climate, cg.Component)
|
AirCon = aux_ac_ns.class_("AirCon", climate.Climate, cg.Component)
|
||||||
@@ -74,6 +78,16 @@ CONFIG_SCHEMA = cv.All(
|
|||||||
cv.GenerateID(): cv.declare_id(AirCon),
|
cv.GenerateID(): cv.declare_id(AirCon),
|
||||||
cv.Optional(CONF_PERIOD, default="7s"): cv.time_period,
|
cv.Optional(CONF_PERIOD, default="7s"): cv.time_period,
|
||||||
cv.Optional(CONF_SHOW_ACTION, default="true"): cv.boolean,
|
cv.Optional(CONF_SHOW_ACTION, default="true"): cv.boolean,
|
||||||
|
cv.Optional(CONF_INDOOR_TEMPERATURE): sensor.sensor_schema(
|
||||||
|
unit_of_measurement=UNIT_CELSIUS,
|
||||||
|
accuracy_decimals=1,
|
||||||
|
device_class=DEVICE_CLASS_TEMPERATURE,
|
||||||
|
state_class=STATE_CLASS_MEASUREMENT,
|
||||||
|
).extend(
|
||||||
|
{
|
||||||
|
cv.Optional(CONF_INTERNAL, default="true"): cv.boolean,
|
||||||
|
}
|
||||||
|
),
|
||||||
cv.Optional(CONF_SUPPORTED_MODES): cv.ensure_list(validate_modes),
|
cv.Optional(CONF_SUPPORTED_MODES): cv.ensure_list(validate_modes),
|
||||||
cv.Optional(CONF_SUPPORTED_SWING_MODES): cv.ensure_list(validate_swing_modes),
|
cv.Optional(CONF_SUPPORTED_SWING_MODES): cv.ensure_list(validate_swing_modes),
|
||||||
cv.Optional(CONF_SUPPORTED_PRESETS): cv.ensure_list(validate_presets),
|
cv.Optional(CONF_SUPPORTED_PRESETS): cv.ensure_list(validate_presets),
|
||||||
@@ -94,6 +108,11 @@ async def to_code(config):
|
|||||||
parent = await cg.get_variable(config[CONF_UART_ID])
|
parent = await cg.get_variable(config[CONF_UART_ID])
|
||||||
cg.add(var.initAC(parent))
|
cg.add(var.initAC(parent))
|
||||||
|
|
||||||
|
if CONF_INDOOR_TEMPERATURE in config:
|
||||||
|
conf = config[CONF_INDOOR_TEMPERATURE]
|
||||||
|
sens = await sensor.new_sensor(conf)
|
||||||
|
cg.add(var.set_indoor_temperature_sensor(sens))
|
||||||
|
|
||||||
cg.add(var.set_period(config[CONF_PERIOD].total_milliseconds))
|
cg.add(var.set_period(config[CONF_PERIOD].total_milliseconds))
|
||||||
cg.add(var.set_show_action(config[CONF_SHOW_ACTION]))
|
cg.add(var.set_show_action(config[CONF_SHOW_ACTION]))
|
||||||
if CONF_SUPPORTED_MODES in config:
|
if CONF_SUPPORTED_MODES in config:
|
||||||
|
|||||||
@@ -53,6 +53,10 @@ climate:
|
|||||||
uart_id: ac_uart_bus
|
uart_id: ac_uart_bus
|
||||||
period: 7s # период опроса состояния сплита, по дефолту 7 сек
|
period: 7s # период опроса состояния сплита, по дефолту 7 сек
|
||||||
show_action: true # надо ли показывать текущий режим работы: при HEAT_COOL mode сплит может греть (HEAT), охлаждать (COOL) или бездействовать (IDLE)
|
show_action: true # надо ли показывать текущий режим работы: при HEAT_COOL mode сплит может греть (HEAT), охлаждать (COOL) или бездействовать (IDLE)
|
||||||
|
indoor_temperature:
|
||||||
|
name: AC Indoor Temperature
|
||||||
|
id: ac_indoor_temp
|
||||||
|
internal: true # сенсор установлен как внутренний по дефолту
|
||||||
visual:
|
visual:
|
||||||
min_temperature: 16
|
min_temperature: 16
|
||||||
max_temperature: 32
|
max_temperature: 32
|
||||||
|
|||||||
Reference in New Issue
Block a user