mirror of
				https://github.com/esphome/esphome.git
				synced 2025-11-04 09:01:49 +00:00 
			
		
		
		
	Compare commits
	
		
			38 Commits
		
	
	
		
			2022.4.0b3
			...
			2022.2.4
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					138d6e505b | ||
| 
						 | 
					2748e6ba29 | ||
| 
						 | 
					dbd4e927d8 | ||
| 
						 | 
					e73d47918f | ||
| 
						 | 
					b881bc071e | ||
| 
						 | 
					1d0395d1c7 | ||
| 
						 | 
					616c787e37 | ||
| 
						 | 
					0c4de2bc97 | ||
| 
						 | 
					c2f5ac9eba | ||
| 
						 | 
					5764c988af | ||
| 
						 | 
					ccc2fbfd67 | ||
| 
						 | 
					10b4adb8e6 | ||
| 
						 | 
					83b7181bcb | ||
| 
						 | 
					8886b7e141 | ||
| 
						 | 
					7dcc4d030b | ||
| 
						 | 
					b9398897c1 | ||
| 
						 | 
					657b1c60ae | ||
| 
						 | 
					dc54b17778 | ||
| 
						 | 
					1fb214165b | ||
| 
						 | 
					81b2fd78f5 | ||
| 
						 | 
					69002fb1e6 | ||
| 
						 | 
					75332a752d | ||
| 
						 | 
					09ed1aed93 | ||
| 
						 | 
					53d3718028 | ||
| 
						 | 
					2b5dce5232 | ||
| 
						 | 
					9ad84150aa | ||
| 
						 | 
					c0523590b4 | ||
| 
						 | 
					c7f091ab10 | ||
| 
						 | 
					7479e0aada | ||
| 
						 | 
					5bbee1a1fe | ||
| 
						 | 
					bdb9546ca3 | ||
| 
						 | 
					46af4cad6e | ||
| 
						 | 
					76a238912b | ||
| 
						 | 
					909a526967 | ||
| 
						 | 
					cd6f4fb93f | ||
| 
						 | 
					c19458696e | ||
| 
						 | 
					318b930e9f | ||
| 
						 | 
					9296a078a7 | 
@@ -43,7 +43,7 @@ RUN \
 | 
			
		||||
    # Ubuntu python3-pip is missing wheel
 | 
			
		||||
    pip3 install --no-cache-dir \
 | 
			
		||||
        wheel==0.37.1 \
 | 
			
		||||
        platformio==5.2.4 \
 | 
			
		||||
        platformio==5.2.5 \
 | 
			
		||||
    # Change some platformio settings
 | 
			
		||||
    && platformio settings set enable_telemetry No \
 | 
			
		||||
    && platformio settings set check_libraries_interval 1000000 \
 | 
			
		||||
 
 | 
			
		||||
@@ -7,12 +7,12 @@
 | 
			
		||||
# Check SSL requirements, if enabled
 | 
			
		||||
if bashio::config.true 'ssl'; then
 | 
			
		||||
    if ! bashio::config.has_value 'certfile'; then
 | 
			
		||||
        bashio::fatal 'SSL is enabled, but no certfile was specified.'
 | 
			
		||||
        bashio::log.fatal 'SSL is enabled, but no certfile was specified.'
 | 
			
		||||
        bashio::exit.nok
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if ! bashio::config.has_value 'keyfile'; then
 | 
			
		||||
        bashio::fatal 'SSL is enabled, but no keyfile was specified'
 | 
			
		||||
        bashio::log.fatal 'SSL is enabled, but no keyfile was specified'
 | 
			
		||||
        bashio::exit.nok
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
#include "climate.h"
 | 
			
		||||
#include "esphome/core/macros.h"
 | 
			
		||||
 | 
			
		||||
namespace esphome {
 | 
			
		||||
namespace climate {
 | 
			
		||||
@@ -326,14 +327,17 @@ optional<ClimateDeviceRestoreState> Climate::restore_state_() {
 | 
			
		||||
  return recovered;
 | 
			
		||||
}
 | 
			
		||||
void Climate::save_state_() {
 | 
			
		||||
#if defined(USE_ESP_IDF) && !defined(CLANG_TIDY)
 | 
			
		||||
#if (defined(USE_ESP_IDF) || (defined(USE_ESP8266) && USE_ARDUINO_VERSION_CODE >= VERSION_CODE(3, 0, 0))) && \
 | 
			
		||||
    !defined(CLANG_TIDY)
 | 
			
		||||
#pragma GCC diagnostic ignored "-Wclass-memaccess"
 | 
			
		||||
#define TEMP_IGNORE_MEMACCESS
 | 
			
		||||
#endif
 | 
			
		||||
  ClimateDeviceRestoreState state{};
 | 
			
		||||
  // initialize as zero to prevent random data on stack triggering erase
 | 
			
		||||
  memset(&state, 0, sizeof(ClimateDeviceRestoreState));
 | 
			
		||||
#if USE_ESP_IDF && !defined(CLANG_TIDY)
 | 
			
		||||
#ifdef TEMP_IGNORE_MEMACCESS
 | 
			
		||||
#pragma GCC diagnostic pop
 | 
			
		||||
#undef TEMP_IGNORE_MEMACCESS
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  state.mode = this->mode;
 | 
			
		||||
 
 | 
			
		||||
@@ -110,6 +110,9 @@ void DallasComponent::update() {
 | 
			
		||||
  if (!result) {
 | 
			
		||||
    ESP_LOGE(TAG, "Requesting conversion failed");
 | 
			
		||||
    this->status_set_warning();
 | 
			
		||||
    for (auto *sensor : this->sensors_) {
 | 
			
		||||
      sensor->publish_state(NAN);
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -53,9 +53,9 @@ void DebugComponent::dump_config() {
 | 
			
		||||
#ifdef USE_SENSOR
 | 
			
		||||
  LOG_SENSOR("  ", "Free space on heap", this->free_sensor_);
 | 
			
		||||
  LOG_SENSOR("  ", "Largest free heap block", this->block_sensor_);
 | 
			
		||||
#if defined(USE_ESP8266) && ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2)
 | 
			
		||||
#if defined(USE_ESP8266) && USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2)
 | 
			
		||||
  LOG_SENSOR("  ", "Heap fragmentation", this->fragmentation_sensor_);
 | 
			
		||||
#endif  // defined(USE_ESP8266) && ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2)
 | 
			
		||||
#endif  // defined(USE_ESP8266) && USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2)
 | 
			
		||||
#endif  // USE_SENSOR
 | 
			
		||||
 | 
			
		||||
  ESP_LOGD(TAG, "ESPHome version %s", ESPHOME_VERSION);
 | 
			
		||||
@@ -316,7 +316,7 @@ void DebugComponent::update() {
 | 
			
		||||
#endif
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#if defined(USE_ESP8266) && ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2)
 | 
			
		||||
#if defined(USE_ESP8266) && USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2)
 | 
			
		||||
  if (this->fragmentation_sensor_ != nullptr) {
 | 
			
		||||
    // NOLINTNEXTLINE(readability-static-accessed-through-instance)
 | 
			
		||||
    this->fragmentation_sensor_->publish_state(ESP.getHeapFragmentation());
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ class DebugComponent : public PollingComponent {
 | 
			
		||||
#ifdef USE_SENSOR
 | 
			
		||||
  void set_free_sensor(sensor::Sensor *free_sensor) { free_sensor_ = free_sensor; }
 | 
			
		||||
  void set_block_sensor(sensor::Sensor *block_sensor) { block_sensor_ = block_sensor; }
 | 
			
		||||
#if defined(USE_ESP8266) && ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2)
 | 
			
		||||
#if defined(USE_ESP8266) && USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2)
 | 
			
		||||
  void set_fragmentation_sensor(sensor::Sensor *fragmentation_sensor) { fragmentation_sensor_ = fragmentation_sensor; }
 | 
			
		||||
#endif
 | 
			
		||||
  void set_loop_time_sensor(sensor::Sensor *loop_time_sensor) { loop_time_sensor_ = loop_time_sensor; }
 | 
			
		||||
@@ -42,7 +42,7 @@ class DebugComponent : public PollingComponent {
 | 
			
		||||
 | 
			
		||||
  sensor::Sensor *free_sensor_{nullptr};
 | 
			
		||||
  sensor::Sensor *block_sensor_{nullptr};
 | 
			
		||||
#if defined(USE_ESP8266) && ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2)
 | 
			
		||||
#if defined(USE_ESP8266) && USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2)
 | 
			
		||||
  sensor::Sensor *fragmentation_sensor_{nullptr};
 | 
			
		||||
#endif
 | 
			
		||||
  sensor::Sensor *loop_time_sensor_{nullptr};
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ from esphome.const import (
 | 
			
		||||
    CONF_FRAGMENTATION,
 | 
			
		||||
    CONF_BLOCK,
 | 
			
		||||
    CONF_LOOP_TIME,
 | 
			
		||||
    ENTITY_CATEGORY_DIAGNOSTIC,
 | 
			
		||||
    UNIT_MILLISECOND,
 | 
			
		||||
    UNIT_PERCENT,
 | 
			
		||||
    UNIT_BYTES,
 | 
			
		||||
@@ -18,14 +19,34 @@ DEPENDENCIES = ["debug"]
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = {
 | 
			
		||||
    cv.GenerateID(CONF_DEBUG_ID): cv.use_id(DebugComponent),
 | 
			
		||||
    cv.Optional(CONF_FREE): sensor.sensor_schema(UNIT_BYTES, ICON_COUNTER, 0),
 | 
			
		||||
    cv.Optional(CONF_BLOCK): sensor.sensor_schema(UNIT_BYTES, ICON_COUNTER, 0),
 | 
			
		||||
    cv.Optional(CONF_FREE): sensor.sensor_schema(
 | 
			
		||||
        unit_of_measurement=UNIT_BYTES,
 | 
			
		||||
        icon=ICON_COUNTER,
 | 
			
		||||
        accuracy_decimals=0,
 | 
			
		||||
        entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
 | 
			
		||||
    ),
 | 
			
		||||
    cv.Optional(CONF_BLOCK): sensor.sensor_schema(
 | 
			
		||||
        unit_of_measurement=UNIT_BYTES,
 | 
			
		||||
        icon=ICON_COUNTER,
 | 
			
		||||
        accuracy_decimals=0,
 | 
			
		||||
        entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
 | 
			
		||||
    ),
 | 
			
		||||
    cv.Optional(CONF_FRAGMENTATION): cv.All(
 | 
			
		||||
        cv.only_on_esp8266,
 | 
			
		||||
        cv.require_framework_version(esp8266_arduino=cv.Version(2, 5, 2)),
 | 
			
		||||
        sensor.sensor_schema(UNIT_PERCENT, ICON_COUNTER, 1),
 | 
			
		||||
        sensor.sensor_schema(
 | 
			
		||||
            unit_of_measurement=UNIT_PERCENT,
 | 
			
		||||
            icon=ICON_COUNTER,
 | 
			
		||||
            accuracy_decimals=1,
 | 
			
		||||
            entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
    cv.Optional(CONF_LOOP_TIME): sensor.sensor_schema(
 | 
			
		||||
        unit_of_measurement=UNIT_MILLISECOND,
 | 
			
		||||
        icon=ICON_TIMER,
 | 
			
		||||
        accuracy_decimals=0,
 | 
			
		||||
        entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
 | 
			
		||||
    ),
 | 
			
		||||
    cv.Optional(CONF_LOOP_TIME): sensor.sensor_schema(UNIT_MILLISECOND, ICON_TIMER, 0),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
from esphome.components import text_sensor
 | 
			
		||||
import esphome.config_validation as cv
 | 
			
		||||
import esphome.codegen as cg
 | 
			
		||||
from esphome.const import CONF_DEVICE
 | 
			
		||||
from esphome.const import CONF_DEVICE, ENTITY_CATEGORY_DIAGNOSTIC
 | 
			
		||||
 | 
			
		||||
from . import CONF_DEBUG_ID, DebugComponent
 | 
			
		||||
 | 
			
		||||
@@ -11,7 +11,9 @@ DEPENDENCIES = ["debug"]
 | 
			
		||||
CONFIG_SCHEMA = cv.Schema(
 | 
			
		||||
    {
 | 
			
		||||
        cv.GenerateID(CONF_DEBUG_ID): cv.use_id(DebugComponent),
 | 
			
		||||
        cv.Optional(CONF_DEVICE): text_sensor.text_sensor_schema(),
 | 
			
		||||
        cv.Optional(CONF_DEVICE): text_sensor.text_sensor_schema(
 | 
			
		||||
            entity_category=ENTITY_CATEGORY_DIAGNOSTIC
 | 
			
		||||
        ),
 | 
			
		||||
    }
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,9 +11,39 @@ from esphome.const import (
 | 
			
		||||
    CONF_WAKEUP_PIN,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
from esphome.components.esp32 import get_esp32_variant
 | 
			
		||||
from esphome.components.esp32.const import (
 | 
			
		||||
    VARIANT_ESP32,
 | 
			
		||||
    VARIANT_ESP32C3,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
WAKEUP_PINS = {
 | 
			
		||||
    VARIANT_ESP32: [
 | 
			
		||||
        0,
 | 
			
		||||
        2,
 | 
			
		||||
        4,
 | 
			
		||||
        12,
 | 
			
		||||
        13,
 | 
			
		||||
        14,
 | 
			
		||||
        15,
 | 
			
		||||
        25,
 | 
			
		||||
        26,
 | 
			
		||||
        27,
 | 
			
		||||
        32,
 | 
			
		||||
        33,
 | 
			
		||||
        34,
 | 
			
		||||
        35,
 | 
			
		||||
        36,
 | 
			
		||||
        37,
 | 
			
		||||
        38,
 | 
			
		||||
        39,
 | 
			
		||||
    ],
 | 
			
		||||
    VARIANT_ESP32C3: [0, 1, 2, 3, 4, 5],
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def validate_pin_number(value):
 | 
			
		||||
    valid_pins = [0, 2, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 37, 38, 39]
 | 
			
		||||
    valid_pins = WAKEUP_PINS.get(get_esp32_variant(), WAKEUP_PINS[VARIANT_ESP32])
 | 
			
		||||
    if value[CONF_NUMBER] not in valid_pins:
 | 
			
		||||
        raise cv.Invalid(
 | 
			
		||||
            f"Only pins {', '.join(str(x) for x in valid_pins)} support wakeup"
 | 
			
		||||
@@ -21,6 +51,14 @@ def validate_pin_number(value):
 | 
			
		||||
    return value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def validate_config(config):
 | 
			
		||||
    if get_esp32_variant() == VARIANT_ESP32C3 and CONF_ESP32_EXT1_WAKEUP in config:
 | 
			
		||||
        raise cv.Invalid("ESP32-C3 does not support wakeup from touch.")
 | 
			
		||||
    if get_esp32_variant() == VARIANT_ESP32C3 and CONF_TOUCH_WAKEUP in config:
 | 
			
		||||
        raise cv.Invalid("ESP32-C3 does not support wakeup from ext1")
 | 
			
		||||
    return config
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
deep_sleep_ns = cg.esphome_ns.namespace("deep_sleep")
 | 
			
		||||
DeepSleepComponent = deep_sleep_ns.class_("DeepSleepComponent", cg.Component)
 | 
			
		||||
EnterDeepSleepAction = deep_sleep_ns.class_("EnterDeepSleepAction", automation.Action)
 | 
			
		||||
 
 | 
			
		||||
@@ -104,7 +104,7 @@ void DeepSleepComponent::begin_sleep(bool manual) {
 | 
			
		||||
 | 
			
		||||
  App.run_safe_shutdown_hooks();
 | 
			
		||||
 | 
			
		||||
#ifdef USE_ESP32
 | 
			
		||||
#if defined(USE_ESP32) && !defined(USE_ESP32_VARIANT_ESP32C3)
 | 
			
		||||
  if (this->sleep_duration_.has_value())
 | 
			
		||||
    esp_sleep_enable_timer_wakeup(*this->sleep_duration_);
 | 
			
		||||
  if (this->wakeup_pin_ != nullptr) {
 | 
			
		||||
@@ -126,6 +126,18 @@ void DeepSleepComponent::begin_sleep(bool manual) {
 | 
			
		||||
  esp_deep_sleep_start();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef USE_ESP32_VARIANT_ESP32C3
 | 
			
		||||
  if (this->sleep_duration_.has_value())
 | 
			
		||||
    esp_sleep_enable_timer_wakeup(*this->sleep_duration_);
 | 
			
		||||
  if (this->wakeup_pin_ != nullptr) {
 | 
			
		||||
    bool level = !this->wakeup_pin_->is_inverted();
 | 
			
		||||
    if (this->wakeup_pin_mode_ == WAKEUP_PIN_MODE_INVERT_WAKEUP && this->wakeup_pin_->digital_read()) {
 | 
			
		||||
      level = !level;
 | 
			
		||||
    }
 | 
			
		||||
    esp_deep_sleep_enable_gpio_wakeup(gpio_num_t(this->wakeup_pin_->get_pin()), level);
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef USE_ESP8266
 | 
			
		||||
  ESP.deepSleep(*this->sleep_duration_);  // NOLINT(readability-static-accessed-through-instance)
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -57,13 +57,16 @@ class DeepSleepComponent : public Component {
 | 
			
		||||
 public:
 | 
			
		||||
  /// Set the duration in ms the component should sleep once it's in deep sleep mode.
 | 
			
		||||
  void set_sleep_duration(uint32_t time_ms);
 | 
			
		||||
#ifdef USE_ESP32
 | 
			
		||||
#if defined(USE_ESP32)
 | 
			
		||||
  /** Set the pin to wake up to on the ESP32 once it's in deep sleep mode.
 | 
			
		||||
   * Use the inverted property to set the wakeup level.
 | 
			
		||||
   */
 | 
			
		||||
  void set_wakeup_pin(InternalGPIOPin *pin) { this->wakeup_pin_ = pin; }
 | 
			
		||||
 | 
			
		||||
  void set_wakeup_pin_mode(WakeupPinMode wakeup_pin_mode);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(USE_ESP32) && !defined(USE_ESP32_VARIANT_ESP32C3)
 | 
			
		||||
 | 
			
		||||
  void set_ext1_wakeup(Ext1Wakeup ext1_wakeup);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,9 +4,10 @@
 | 
			
		||||
 | 
			
		||||
#include "esphome/core/helpers.h"
 | 
			
		||||
 | 
			
		||||
#undef ARDUINOJSON_ENABLE_STD_STRING
 | 
			
		||||
#define ARDUINOJSON_ENABLE_STD_STRING 1  // NOLINT
 | 
			
		||||
 | 
			
		||||
#define ARDUINOJSON_USE_LONG_LONG 1  // NOLINT
 | 
			
		||||
 | 
			
		||||
#include <ArduinoJson.h>
 | 
			
		||||
 | 
			
		||||
namespace esphome {
 | 
			
		||||
 
 | 
			
		||||
@@ -113,8 +113,27 @@ void LilygoT547Touchscreen::loop() {
 | 
			
		||||
      if (tp.state == 0x06)
 | 
			
		||||
        tp.state = 0x07;
 | 
			
		||||
 | 
			
		||||
      tp.y = (uint16_t)((buffer[i * 5 + 1 + offset] << 4) | ((buffer[i * 5 + 3 + offset] >> 4) & 0x0F));
 | 
			
		||||
      tp.x = (uint16_t)((buffer[i * 5 + 2 + offset] << 4) | (buffer[i * 5 + 3 + offset] & 0x0F));
 | 
			
		||||
      uint16_t y = (uint16_t)((buffer[i * 5 + 1 + offset] << 4) | ((buffer[i * 5 + 3 + offset] >> 4) & 0x0F));
 | 
			
		||||
      uint16_t x = (uint16_t)((buffer[i * 5 + 2 + offset] << 4) | (buffer[i * 5 + 3 + offset] & 0x0F));
 | 
			
		||||
 | 
			
		||||
      switch (this->rotation_) {
 | 
			
		||||
        case ROTATE_0_DEGREES:
 | 
			
		||||
          tp.y = this->display_height_ - y;
 | 
			
		||||
          tp.x = x;
 | 
			
		||||
          break;
 | 
			
		||||
        case ROTATE_90_DEGREES:
 | 
			
		||||
          tp.x = this->display_height_ - y;
 | 
			
		||||
          tp.y = this->display_width_ - x;
 | 
			
		||||
          break;
 | 
			
		||||
        case ROTATE_180_DEGREES:
 | 
			
		||||
          tp.y = y;
 | 
			
		||||
          tp.x = this->display_width_ - x;
 | 
			
		||||
          break;
 | 
			
		||||
        case ROTATE_270_DEGREES:
 | 
			
		||||
          tp.x = y;
 | 
			
		||||
          tp.y = x;
 | 
			
		||||
          break;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this->defer([this, tp]() { this->send_touch_(tp); });
 | 
			
		||||
    }
 | 
			
		||||
@@ -122,8 +141,28 @@ void LilygoT547Touchscreen::loop() {
 | 
			
		||||
    TouchPoint tp;
 | 
			
		||||
    tp.id = (buffer[0] >> 4) & 0x0F;
 | 
			
		||||
    tp.state = 0x06;
 | 
			
		||||
    tp.y = (uint16_t)((buffer[0 * 5 + 1] << 4) | ((buffer[0 * 5 + 3] >> 4) & 0x0F));
 | 
			
		||||
    tp.x = (uint16_t)((buffer[0 * 5 + 2] << 4) | (buffer[0 * 5 + 3] & 0x0F));
 | 
			
		||||
 | 
			
		||||
    uint16_t y = (uint16_t)((buffer[0 * 5 + 1] << 4) | ((buffer[0 * 5 + 3] >> 4) & 0x0F));
 | 
			
		||||
    uint16_t x = (uint16_t)((buffer[0 * 5 + 2] << 4) | (buffer[0 * 5 + 3] & 0x0F));
 | 
			
		||||
 | 
			
		||||
    switch (this->rotation_) {
 | 
			
		||||
      case ROTATE_0_DEGREES:
 | 
			
		||||
        tp.y = this->display_height_ - y;
 | 
			
		||||
        tp.x = x;
 | 
			
		||||
        break;
 | 
			
		||||
      case ROTATE_90_DEGREES:
 | 
			
		||||
        tp.x = this->display_height_ - y;
 | 
			
		||||
        tp.y = this->display_width_ - x;
 | 
			
		||||
        break;
 | 
			
		||||
      case ROTATE_180_DEGREES:
 | 
			
		||||
        tp.y = y;
 | 
			
		||||
        tp.x = this->display_width_ - x;
 | 
			
		||||
        break;
 | 
			
		||||
      case ROTATE_270_DEGREES:
 | 
			
		||||
        tp.x = y;
 | 
			
		||||
        tp.y = x;
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this->defer([this, tp]() { this->send_touch_(tp); });
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ class ArduinoESP8266OTABackend : public OTABackend {
 | 
			
		||||
  OTAResponseTypes write(uint8_t *data, size_t len) override;
 | 
			
		||||
  OTAResponseTypes end() override;
 | 
			
		||||
  void abort() override;
 | 
			
		||||
#if ARDUINO_VERSION_CODE >= VERSION_CODE(2, 7, 0)
 | 
			
		||||
#if USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 7, 0)
 | 
			
		||||
  bool supports_compression() override { return true; }
 | 
			
		||||
#else
 | 
			
		||||
  bool supports_compression() override { return false; }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
"""Constants used by esphome."""
 | 
			
		||||
 | 
			
		||||
__version__ = "2022.2.0b3"
 | 
			
		||||
__version__ = "2022.2.4"
 | 
			
		||||
 | 
			
		||||
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -116,7 +116,7 @@ optional<uint32_t> HOT Scheduler::next_schedule_in() {
 | 
			
		||||
    return 0;
 | 
			
		||||
  return next_time - now;
 | 
			
		||||
}
 | 
			
		||||
void IRAM_ATTR HOT Scheduler::call() {
 | 
			
		||||
void HOT Scheduler::call() {
 | 
			
		||||
  const uint32_t now = this->millis_();
 | 
			
		||||
  this->process_to_add();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,12 +6,12 @@ tornado==6.1
 | 
			
		||||
tzlocal==4.1    # from time
 | 
			
		||||
tzdata>=2021.1  # from time
 | 
			
		||||
pyserial==3.5
 | 
			
		||||
platformio==5.2.4  # When updating platformio, also update Dockerfile
 | 
			
		||||
platformio==5.2.5  # When updating platformio, also update Dockerfile
 | 
			
		||||
esptool==3.2
 | 
			
		||||
click==8.0.3
 | 
			
		||||
esphome-dashboard==20220209.0
 | 
			
		||||
aioesphomeapi==10.8.2
 | 
			
		||||
zeroconf==0.37.0
 | 
			
		||||
zeroconf==0.38.3
 | 
			
		||||
 | 
			
		||||
# esp-idf requires this, but doesn't bundle it by default
 | 
			
		||||
# https://github.com/espressif/esp-idf/blob/220590d599e134d7a5e7f1e683cc4550349ffbf8/requirements.txt#L24
 | 
			
		||||
 
 | 
			
		||||
@@ -262,7 +262,7 @@ power_supply:
 | 
			
		||||
deep_sleep:
 | 
			
		||||
  run_duration: 20s
 | 
			
		||||
  sleep_duration: 50s
 | 
			
		||||
  wakeup_pin: GPIO39
 | 
			
		||||
  wakeup_pin: GPIO2
 | 
			
		||||
  wakeup_pin_mode: INVERT_WAKEUP
 | 
			
		||||
 | 
			
		||||
ads1115:
 | 
			
		||||
 
 | 
			
		||||
@@ -60,7 +60,7 @@ deep_sleep:
 | 
			
		||||
    gpio_wakeup_reason: 10s
 | 
			
		||||
    touch_wakeup_reason: 15s
 | 
			
		||||
  sleep_duration: 50s
 | 
			
		||||
  wakeup_pin: GPIO39
 | 
			
		||||
  wakeup_pin: GPIO2
 | 
			
		||||
  wakeup_pin_mode: INVERT_WAKEUP
 | 
			
		||||
 | 
			
		||||
as3935_i2c:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user