Files
esphome-dev/esphome/components/pid/sensor/__init__.py
T
Otto Winter a6d31f05ee PID Climate (#885)
* PID Climate

* Add sensor for debugging PID output value

* Add dump_config, use percent

* Add more observable values

* Update

* Set target temperature

* Add autotuner

* Add algorithm explanation

* Add autotuner action, update controller

* Add simulator

* Format

* Change defaults

* Updates
2020-01-04 12:43:11 +01:00

37 lines
1.4 KiB
Python

import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.components import sensor
from esphome.const import CONF_ID, UNIT_PERCENT, ICON_GAUGE, CONF_TYPE
from ..climate import pid_ns, PIDClimate
PIDClimateSensor = pid_ns.class_('PIDClimateSensor', sensor.Sensor, cg.Component)
PIDClimateSensorType = pid_ns.enum('PIDClimateSensorType')
PID_CLIMATE_SENSOR_TYPES = {
'RESULT': PIDClimateSensorType.PID_SENSOR_TYPE_RESULT,
'ERROR': PIDClimateSensorType.PID_SENSOR_TYPE_ERROR,
'PROPORTIONAL': PIDClimateSensorType.PID_SENSOR_TYPE_PROPORTIONAL,
'INTEGRAL': PIDClimateSensorType.PID_SENSOR_TYPE_INTEGRAL,
'DERIVATIVE': PIDClimateSensorType.PID_SENSOR_TYPE_DERIVATIVE,
'HEAT': PIDClimateSensorType.PID_SENSOR_TYPE_HEAT,
'COOL': PIDClimateSensorType.PID_SENSOR_TYPE_COOL,
}
CONF_CLIMATE_ID = 'climate_id'
CONFIG_SCHEMA = sensor.sensor_schema(UNIT_PERCENT, ICON_GAUGE, 1).extend({
cv.GenerateID(): cv.declare_id(PIDClimateSensor),
cv.GenerateID(CONF_CLIMATE_ID): cv.use_id(PIDClimate),
cv.Required(CONF_TYPE): cv.enum(PID_CLIMATE_SENSOR_TYPES, upper=True),
}).extend(cv.COMPONENT_SCHEMA)
def to_code(config):
parent = yield cg.get_variable(config[CONF_CLIMATE_ID])
var = cg.new_Pvariable(config[CONF_ID])
yield sensor.register_sensor(var, config)
yield cg.register_component(var, config)
cg.add(var.set_parent(parent))
cg.add(var.set_type(config[CONF_TYPE]))