Custom Climate

This integration can be used to create custom climate devices in ESPHome using the C++ (Arduino) API.

Please first read Custom Sensor Component guide, the same principles apply here.

The example below is an example of a custom climate device - all climate devices must override two methods (Climate ):

  • traits: This should return a ClimateTraits object representing the capabilities of the climate device.

  • control: This receives a ClimateCall object that contains the command the user tried to set.

#include "esphome.h"

class MyCustomClimate : public Component, public Climate {
 public:
  void setup() override {
    // This will be called by App.setup()
  }
  void control(const ClimateCall &call) override {
    if (call.get_mode().has_value()) {
      // User requested mode change
      ClimateMode mode = *call.get_mode();
      // Send mode to hardware
      // ...

      // Publish updated state
      this->mode = mode;
      this->publish_state();
    }
    if (call.get_target_temperature().has_value()) {
      // User requested target temperature change
      float temp = *call.get_target_temperature();
      // Send target temp to climate
      // ...
    }
  }
  ClimateTraits traits() override {
    // The capabilities of the climate device
    auto traits = climate::ClimateTraits();
    traits.set_supports_current_temperature(true);
    traits.set_supported_modes({climate::CLIMATE_MODE_HEAT_COOL});
    return traits;
  }
};

(Store this file in your configuration directory, for example my_climate.h)

And in YAML:

# Example configuration entry
esphome:
  includes:
    - my_climate.h

climate:
- platform: custom
  lambda: |-
    auto my_custom_climate = new MyCustomClimate();
    App.register_component(my_custom_climate);
    return {my_custom_climate};

  climates:
    - name: "My Custom Climate"

Configuration variables:

  • lambda (Required, lambda): The lambda to run for instantiating the climate(s).

  • climates (Required, list): A list of climates to initialize. The length here must equal the number of items in the return statement of the lambda.

See Climate

See Also