mirror of
				https://github.com/esphome/esphome.git
				synced 2025-11-03 08:31:47 +00:00 
			
		
		
		
	Compare commits
	
		
			6 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					b89c04b928 | ||
| 
						 | 
					12090657bb | ||
| 
						 | 
					4e21cf0bdd | ||
| 
						 | 
					ba4ef72d56 | ||
| 
						 | 
					f3e6a4314f | ||
| 
						 | 
					e14ce3d950 | 
@@ -429,15 +429,16 @@ void APIServer::on_shutdown() {
 | 
			
		||||
 | 
			
		||||
#ifdef USE_VOICE_ASSISTANT
 | 
			
		||||
bool APIServer::start_voice_assistant() {
 | 
			
		||||
  bool result = false;
 | 
			
		||||
  for (auto &c : this->clients_) {
 | 
			
		||||
    result |= c->request_voice_assistant(true);
 | 
			
		||||
    if (c->request_voice_assistant(true))
 | 
			
		||||
      return true;
 | 
			
		||||
  }
 | 
			
		||||
  return result;
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
void APIServer::stop_voice_assistant() {
 | 
			
		||||
  for (auto &c : this->clients_) {
 | 
			
		||||
    c->request_voice_assistant(false);
 | 
			
		||||
    if (c->request_voice_assistant(false))
 | 
			
		||||
      return;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -17,26 +17,29 @@ debug_ns = cg.esphome_ns.namespace("debug")
 | 
			
		||||
DebugComponent = debug_ns.class_("DebugComponent", cg.PollingComponent)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = cv.Schema(
 | 
			
		||||
    {
 | 
			
		||||
        cv.GenerateID(): cv.declare_id(DebugComponent),
 | 
			
		||||
        cv.Optional(CONF_DEVICE): cv.invalid(
 | 
			
		||||
            "The 'device' option has been moved to the 'debug' text_sensor component"
 | 
			
		||||
        ),
 | 
			
		||||
        cv.Optional(CONF_FREE): cv.invalid(
 | 
			
		||||
            "The 'free' option has been moved to the 'debug' sensor component"
 | 
			
		||||
        ),
 | 
			
		||||
        cv.Optional(CONF_BLOCK): cv.invalid(
 | 
			
		||||
            "The 'block' option has been moved to the 'debug' sensor component"
 | 
			
		||||
        ),
 | 
			
		||||
        cv.Optional(CONF_FRAGMENTATION): cv.invalid(
 | 
			
		||||
            "The 'fragmentation' option has been moved to the 'debug' sensor component"
 | 
			
		||||
        ),
 | 
			
		||||
        cv.Optional(CONF_LOOP_TIME): cv.invalid(
 | 
			
		||||
            "The 'loop_time' option has been moved to the 'debug' sensor component"
 | 
			
		||||
        ),
 | 
			
		||||
    }
 | 
			
		||||
).extend(cv.polling_component_schema("60s"))
 | 
			
		||||
CONFIG_SCHEMA = cv.All(
 | 
			
		||||
    cv.Schema(
 | 
			
		||||
        {
 | 
			
		||||
            cv.GenerateID(): cv.declare_id(DebugComponent),
 | 
			
		||||
            cv.Optional(CONF_DEVICE): cv.invalid(
 | 
			
		||||
                "The 'device' option has been moved to the 'debug' text_sensor component"
 | 
			
		||||
            ),
 | 
			
		||||
            cv.Optional(CONF_FREE): cv.invalid(
 | 
			
		||||
                "The 'free' option has been moved to the 'debug' sensor component"
 | 
			
		||||
            ),
 | 
			
		||||
            cv.Optional(CONF_BLOCK): cv.invalid(
 | 
			
		||||
                "The 'block' option has been moved to the 'debug' sensor component"
 | 
			
		||||
            ),
 | 
			
		||||
            cv.Optional(CONF_FRAGMENTATION): cv.invalid(
 | 
			
		||||
                "The 'fragmentation' option has been moved to the 'debug' sensor component"
 | 
			
		||||
            ),
 | 
			
		||||
            cv.Optional(CONF_LOOP_TIME): cv.invalid(
 | 
			
		||||
                "The 'loop_time' option has been moved to the 'debug' sensor component"
 | 
			
		||||
            ),
 | 
			
		||||
        }
 | 
			
		||||
    ).extend(cv.polling_component_schema("60s")),
 | 
			
		||||
    cv.only_on(["esp32", "esp8266"]),
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def to_code(config):
 | 
			
		||||
 
 | 
			
		||||
@@ -77,10 +77,12 @@ void FingerprintGrowComponent::finish_enrollment(uint8_t result) {
 | 
			
		||||
    this->enrollment_done_callback_.call(this->enrollment_slot_);
 | 
			
		||||
    this->get_fingerprint_count_();
 | 
			
		||||
  } else {
 | 
			
		||||
    this->enrollment_failed_callback_.call(this->enrollment_slot_);
 | 
			
		||||
    if (this->enrollment_slot_ != ENROLLMENT_SLOT_UNUSED) {
 | 
			
		||||
      this->enrollment_failed_callback_.call(this->enrollment_slot_);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  this->enrollment_image_ = 0;
 | 
			
		||||
  this->enrollment_slot_ = 0;
 | 
			
		||||
  this->enrollment_slot_ = ENROLLMENT_SLOT_UNUSED;
 | 
			
		||||
  if (this->enrolling_binary_sensor_ != nullptr) {
 | 
			
		||||
    this->enrolling_binary_sensor_->publish_state(false);
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,8 @@ namespace fingerprint_grow {
 | 
			
		||||
 | 
			
		||||
static const uint16_t START_CODE = 0xEF01;
 | 
			
		||||
 | 
			
		||||
static const uint16_t ENROLLMENT_SLOT_UNUSED = 0xFFFF;
 | 
			
		||||
 | 
			
		||||
enum GrowPacketType {
 | 
			
		||||
  COMMAND = 0x01,
 | 
			
		||||
  DATA = 0x02,
 | 
			
		||||
@@ -158,7 +160,7 @@ class FingerprintGrowComponent : public PollingComponent, public uart::UARTDevic
 | 
			
		||||
  uint32_t new_password_ = -1;
 | 
			
		||||
  GPIOPin *sensing_pin_{nullptr};
 | 
			
		||||
  uint8_t enrollment_image_ = 0;
 | 
			
		||||
  uint16_t enrollment_slot_ = 0;
 | 
			
		||||
  uint16_t enrollment_slot_ = ENROLLMENT_SLOT_UNUSED;
 | 
			
		||||
  uint8_t enrollment_buffers_ = 5;
 | 
			
		||||
  bool waiting_removal_ = false;
 | 
			
		||||
  uint32_t last_aura_led_control_ = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@
 | 
			
		||||
#include "i2c_bus_arduino.h"
 | 
			
		||||
#include "esphome/core/log.h"
 | 
			
		||||
#include "esphome/core/helpers.h"
 | 
			
		||||
#include "esphome/core/application.h"
 | 
			
		||||
#include <Arduino.h>
 | 
			
		||||
#include <cstring>
 | 
			
		||||
 | 
			
		||||
@@ -227,10 +228,14 @@ void ArduinoI2CBus::recover_() {
 | 
			
		||||
    // When SCL is kept LOW at this point, we might be looking at a device
 | 
			
		||||
    // that applies clock stretching. Wait for the release of the SCL line,
 | 
			
		||||
    // but not forever. There is no specification for the maximum allowed
 | 
			
		||||
    // time. We'll stick to 500ms here.
 | 
			
		||||
    auto wait = 20;
 | 
			
		||||
    // time. We yield and reset the WDT, so as to avoid triggering reset.
 | 
			
		||||
    // No point in trying to recover the bus by forcing a uC reset. Bus
 | 
			
		||||
    // should recover in a few ms or less else not likely to recovery at
 | 
			
		||||
    // all.
 | 
			
		||||
    auto wait = 250;
 | 
			
		||||
    while (wait-- && digitalRead(scl_pin_) == LOW) {  // NOLINT
 | 
			
		||||
      delay(25);
 | 
			
		||||
      App.feed_wdt();
 | 
			
		||||
      delayMicroseconds(half_period_usec * 2);
 | 
			
		||||
    }
 | 
			
		||||
    if (digitalRead(scl_pin_) == LOW) {  // NOLINT
 | 
			
		||||
      ESP_LOGE(TAG, "Recovery failed: SCL is held LOW during clock pulse cycle");
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@
 | 
			
		||||
#include "esphome/core/hal.h"
 | 
			
		||||
#include "esphome/core/log.h"
 | 
			
		||||
#include "esphome/core/helpers.h"
 | 
			
		||||
#include "esphome/core/application.h"
 | 
			
		||||
#include <cstring>
 | 
			
		||||
#include <cinttypes>
 | 
			
		||||
 | 
			
		||||
@@ -273,10 +274,14 @@ void IDFI2CBus::recover_() {
 | 
			
		||||
    // When SCL is kept LOW at this point, we might be looking at a device
 | 
			
		||||
    // that applies clock stretching. Wait for the release of the SCL line,
 | 
			
		||||
    // but not forever. There is no specification for the maximum allowed
 | 
			
		||||
    // time. We'll stick to 500ms here.
 | 
			
		||||
    auto wait = 20;
 | 
			
		||||
    // time. We yield and reset the WDT, so as to avoid triggering reset.
 | 
			
		||||
    // No point in trying to recover the bus by forcing a uC reset. Bus
 | 
			
		||||
    // should recover in a few ms or less else not likely to recovery at
 | 
			
		||||
    // all.
 | 
			
		||||
    auto wait = 250;
 | 
			
		||||
    while (wait-- && gpio_get_level(scl_pin) == 0) {
 | 
			
		||||
      delay(25);
 | 
			
		||||
      App.feed_wdt();
 | 
			
		||||
      delayMicroseconds(half_period_usec * 2);
 | 
			
		||||
    }
 | 
			
		||||
    if (gpio_get_level(scl_pin) == 0) {
 | 
			
		||||
      ESP_LOGE(TAG, "Recovery failed: SCL is held LOW during clock pulse cycle");
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
"""Constants used by esphome."""
 | 
			
		||||
 | 
			
		||||
__version__ = "2023.4.1"
 | 
			
		||||
__version__ = "2023.4.2"
 | 
			
		||||
 | 
			
		||||
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user