mirror of
https://github.com/esphome/esphome.git
synced 2025-11-01 07:31:51 +00:00
Merge branch 'integration' into memory_api
This commit is contained in:
@@ -54,7 +54,7 @@ def check_max_runs(value):
|
|||||||
|
|
||||||
if value[CONF_MODE] not in [CONF_QUEUED, CONF_PARALLEL]:
|
if value[CONF_MODE] not in [CONF_QUEUED, CONF_PARALLEL]:
|
||||||
raise cv.Invalid(
|
raise cv.Invalid(
|
||||||
"The option 'max_runs' is only valid in 'queue' and 'parallel' mode.",
|
"The option 'max_runs' is only valid in 'queued' and 'parallel' mode.",
|
||||||
path=[CONF_MAX_RUNS],
|
path=[CONF_MAX_RUNS],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <tuple>
|
||||||
#include "esphome/core/automation.h"
|
#include "esphome/core/automation.h"
|
||||||
#include "esphome/core/component.h"
|
#include "esphome/core/component.h"
|
||||||
#include "esphome/core/helpers.h"
|
#include "esphome/core/helpers.h"
|
||||||
@@ -137,6 +139,10 @@ template<typename... Ts> class QueueingScript : public Script<Ts...>, public Com
|
|||||||
}
|
}
|
||||||
|
|
||||||
void stop() override {
|
void stop() override {
|
||||||
|
// Clear all queued items to free memory immediately
|
||||||
|
for (int i = 0; i < this->max_runs_ - 1; i++) {
|
||||||
|
this->var_queue_[i].reset();
|
||||||
|
}
|
||||||
this->num_queued_ = 0;
|
this->num_queued_ = 0;
|
||||||
this->queue_front_ = 0;
|
this->queue_front_ = 0;
|
||||||
Script<Ts...>::stop();
|
Script<Ts...>::stop();
|
||||||
@@ -144,11 +150,11 @@ template<typename... Ts> class QueueingScript : public Script<Ts...>, public Com
|
|||||||
|
|
||||||
void loop() override {
|
void loop() override {
|
||||||
if (this->num_queued_ != 0 && !this->is_action_running()) {
|
if (this->num_queued_ != 0 && !this->is_action_running()) {
|
||||||
// Dequeue: decrement count, read from front, advance read position
|
// Dequeue: decrement count, move tuple out (frees slot), advance read position
|
||||||
this->num_queued_--;
|
this->num_queued_--;
|
||||||
auto &vars = *this->var_queue_[this->queue_front_];
|
auto tuple_ptr = std::move(this->var_queue_[this->queue_front_]);
|
||||||
this->queue_front_ = (this->queue_front_ + 1) % (this->max_runs_ - 1);
|
this->queue_front_ = (this->queue_front_ + 1) % (this->max_runs_ - 1);
|
||||||
this->trigger_tuple_(vars, typename gens<sizeof...(Ts)>::type());
|
this->trigger_tuple_(*tuple_ptr, typename gens<sizeof...(Ts)>::type());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -696,6 +696,7 @@ CONF_OPEN_DRAIN = "open_drain"
|
|||||||
CONF_OPEN_DRAIN_INTERRUPT = "open_drain_interrupt"
|
CONF_OPEN_DRAIN_INTERRUPT = "open_drain_interrupt"
|
||||||
CONF_OPEN_DURATION = "open_duration"
|
CONF_OPEN_DURATION = "open_duration"
|
||||||
CONF_OPEN_ENDSTOP = "open_endstop"
|
CONF_OPEN_ENDSTOP = "open_endstop"
|
||||||
|
CONF_OPENTHREAD = "openthread"
|
||||||
CONF_OPERATION = "operation"
|
CONF_OPERATION = "operation"
|
||||||
CONF_OPTIMISTIC = "optimistic"
|
CONF_OPTIMISTIC = "optimistic"
|
||||||
CONF_OPTION = "option"
|
CONF_OPTION = "option"
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from esphome.const import (
|
|||||||
CONF_COMMENT,
|
CONF_COMMENT,
|
||||||
CONF_ESPHOME,
|
CONF_ESPHOME,
|
||||||
CONF_ETHERNET,
|
CONF_ETHERNET,
|
||||||
|
CONF_OPENTHREAD,
|
||||||
CONF_PORT,
|
CONF_PORT,
|
||||||
CONF_USE_ADDRESS,
|
CONF_USE_ADDRESS,
|
||||||
CONF_WEB_SERVER,
|
CONF_WEB_SERVER,
|
||||||
@@ -641,6 +642,9 @@ class EsphomeCore:
|
|||||||
if CONF_ETHERNET in self.config:
|
if CONF_ETHERNET in self.config:
|
||||||
return self.config[CONF_ETHERNET][CONF_USE_ADDRESS]
|
return self.config[CONF_ETHERNET][CONF_USE_ADDRESS]
|
||||||
|
|
||||||
|
if CONF_OPENTHREAD in self.config:
|
||||||
|
return f"{self.name}.local"
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ async def test_script_queued(
|
|||||||
api_client_connected() as client,
|
api_client_connected() as client,
|
||||||
):
|
):
|
||||||
# Get services
|
# Get services
|
||||||
entities, services = await client.list_entities_services()
|
_, services = await client.list_entities_services()
|
||||||
|
|
||||||
# Test 1: Queue depth limit
|
# Test 1: Queue depth limit
|
||||||
test_service = next((s for s in services if s.name == "test_queue_depth"), None)
|
test_service = next((s for s in services if s.name == "test_queue_depth"), None)
|
||||||
|
|||||||
@@ -570,6 +570,13 @@ class TestEsphomeCore:
|
|||||||
|
|
||||||
assert target.address == "4.3.2.1"
|
assert target.address == "4.3.2.1"
|
||||||
|
|
||||||
|
def test_address__openthread(self, target):
|
||||||
|
target.name = "test-device"
|
||||||
|
target.config = {}
|
||||||
|
target.config[const.CONF_OPENTHREAD] = {}
|
||||||
|
|
||||||
|
assert target.address == "test-device.local"
|
||||||
|
|
||||||
def test_is_esp32(self, target):
|
def test_is_esp32(self, target):
|
||||||
target.data[const.KEY_CORE] = {const.KEY_TARGET_PLATFORM: "esp32"}
|
target.data[const.KEY_CORE] = {const.KEY_TARGET_PLATFORM: "esp32"}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user