mirror of
https://github.com/GrKoR/esphome_aux_ac_component.git
synced 2025-12-06 19:46:57 +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;
|
||||
}
|
||||
|
||||
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: если расшифруем формулу для уличной температуры, то можно будет вернуть
|
||||
//esphome::sensor::Sensor *sensor_outdoor_temperature = new esphome::sensor::Sensor();
|
||||
|
||||
public:
|
||||
AirCon(){ initAC(); };
|
||||
|
||||
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; }
|
||||
|
||||
void set_indoor_temperature_sensor(sensor::Sensor *temperature_sensor) { sensor_indoor_temperature_ = temperature_sensor; }
|
||||
|
||||
bool get_hw_initialized(){ return _hw_initialized; };
|
||||
bool get_has_connection(){ return _has_connection; };
|
||||
|
||||
@@ -1825,7 +1828,8 @@ class AirCon : public esphome::Component, public esphome::climate::Climate {
|
||||
/*********************************************************************/
|
||||
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: если расшифруем формулу для уличной температуры, то можно будет вернуть
|
||||
//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, " [x] Period: %dms", this->get_period());
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
// вызывается пользователем из интерфейса ESPHome или Home Assistant
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
import logging
|
||||
import esphome.config_validation as cv
|
||||
import esphome.codegen as cg
|
||||
from esphome.components import climate, uart
|
||||
from esphome.components import climate, uart, sensor
|
||||
from esphome.const import (
|
||||
CONF_ID,
|
||||
CONF_NAME,
|
||||
CONF_UART_ID,
|
||||
CONF_PERIOD,
|
||||
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 (
|
||||
ClimateMode,
|
||||
@@ -24,6 +27,7 @@ CONF_SUPPORTED_MODES = 'supported_modes'
|
||||
CONF_SUPPORTED_SWING_MODES = 'supported_swing_modes'
|
||||
CONF_SUPPORTED_PRESETS = 'supported_presets'
|
||||
CONF_SHOW_ACTION = 'show_action'
|
||||
CONF_INDOOR_TEMPERATURE = 'indoor_temperature'
|
||||
|
||||
aux_ac_ns = cg.esphome_ns.namespace("aux_ac")
|
||||
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.Optional(CONF_PERIOD, default="7s"): cv.time_period,
|
||||
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_SWING_MODES): cv.ensure_list(validate_swing_modes),
|
||||
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])
|
||||
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_show_action(config[CONF_SHOW_ACTION]))
|
||||
if CONF_SUPPORTED_MODES in config:
|
||||
|
||||
@@ -53,6 +53,10 @@ climate:
|
||||
uart_id: ac_uart_bus
|
||||
period: 7s # период опроса состояния сплита, по дефолту 7 сек
|
||||
show_action: true # надо ли показывать текущий режим работы: при HEAT_COOL mode сплит может греть (HEAT), охлаждать (COOL) или бездействовать (IDLE)
|
||||
indoor_temperature:
|
||||
name: AC Indoor Temperature
|
||||
id: ac_indoor_temp
|
||||
internal: true # сенсор установлен как внутренний по дефолту
|
||||
visual:
|
||||
min_temperature: 16
|
||||
max_temperature: 32
|
||||
|
||||
Reference in New Issue
Block a user