#include "pid_climate_sensor.h" #include "esphome/core/helpers.h" #include "esphome/core/log.h" namespace esphome { namespace pid { static const char *const TAG = "pid.sensor"; void PIDClimateSensor::setup() { this->parent_->add_on_pid_computed_callback([this]() { this->update_from_parent_(); }); this->update_from_parent_(); } void PIDClimateSensor::update_from_parent_() { float value; switch (this->type_) { case PID_SENSOR_TYPE_RESULT: value = this->parent_->get_output_value(); break; case PID_SENSOR_TYPE_ERROR: value = this->parent_->get_error_value(); break; case PID_SENSOR_TYPE_PROPORTIONAL: value = this->parent_->get_proportional_term(); break; case PID_SENSOR_TYPE_INTEGRAL: value = this->parent_->get_integral_term(); break; case PID_SENSOR_TYPE_DERIVATIVE: value = this->parent_->get_derivative_term(); break; case PID_SENSOR_TYPE_HEAT: value = clamp(this->parent_->get_output_value(), 0.0f, 1.0f); break; case PID_SENSOR_TYPE_COOL: value = clamp(-this->parent_->get_output_value(), 0.0f, 1.0f); break; case PID_SENSOR_TYPE_KP: value = this->parent_->get_kp(); this->publish_state(value); return; case PID_SENSOR_TYPE_KI: value = this->parent_->get_ki(); this->publish_state(value); return; case PID_SENSOR_TYPE_KD: value = this->parent_->get_kd(); this->publish_state(value); return; default: value = NAN; break; } this->publish_state(value * 100.0f); } void PIDClimateSensor::dump_config() { LOG_SENSOR("", "PID Climate Sensor", this); } } // namespace pid } // namespace esphome