mirror of
https://github.com/esphome/esphome.git
synced 2025-11-03 08:31:47 +00:00
Compare commits
13 Commits
2022.9.0b2
...
2022.9.0b5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3de0b601bf | ||
|
|
91560ae4e9 | ||
|
|
fd6135aebb | ||
|
|
e5fe5d1249 | ||
|
|
63b42f3608 | ||
|
|
d56107e97f | ||
|
|
33f296e05b | ||
|
|
97e067a277 | ||
|
|
5f56cf3128 | ||
|
|
5c4e83ebdc | ||
|
|
91f1c25fcc | ||
|
|
47a7a239ae | ||
|
|
fb9984e21f |
@@ -163,7 +163,7 @@ void BME280Component::setup() {
|
||||
return;
|
||||
}
|
||||
config_register &= ~0b11111100;
|
||||
config_register |= 0b000 << 5; // 0.5 ms standby time
|
||||
config_register |= 0b101 << 5; // 1000 ms standby time
|
||||
config_register |= (this->iir_filter_ & 0b111) << 2;
|
||||
if (!this->write_byte(BME280_REGISTER_CONFIG, config_register)) {
|
||||
this->mark_failed();
|
||||
|
||||
@@ -227,7 +227,18 @@ optional<ProntoData> ProntoProtocol::decode(RemoteReceiveData src) {
|
||||
return out;
|
||||
}
|
||||
|
||||
void ProntoProtocol::dump(const ProntoData &data) { ESP_LOGD(TAG, "Received Pronto: data=%s", data.data.c_str()); }
|
||||
void ProntoProtocol::dump(const ProntoData &data) {
|
||||
std::string first, rest;
|
||||
if (data.data.size() < 230) {
|
||||
first = data.data;
|
||||
} else {
|
||||
first = data.data.substr(0, 229);
|
||||
rest = data.data.substr(230);
|
||||
}
|
||||
ESP_LOGD(TAG, "Received Pronto: data=%s", first.c_str());
|
||||
if (!rest.empty())
|
||||
ESP_LOGD(TAG, "%s", rest.c_str());
|
||||
}
|
||||
|
||||
} // namespace remote_base
|
||||
} // namespace esphome
|
||||
|
||||
@@ -769,7 +769,7 @@ void Sprinkler::resume() {
|
||||
ESP_LOGD(TAG, "Resuming valve %u with %u seconds remaining", this->paused_valve_.value_or(0),
|
||||
this->resume_duration_.value_or(0));
|
||||
this->fsm_request_(this->paused_valve_.value(), this->resume_duration_.value());
|
||||
this->reset_resume_();
|
||||
this->reset_resume();
|
||||
} else {
|
||||
ESP_LOGD(TAG, "No valve to resume!");
|
||||
}
|
||||
@@ -783,6 +783,11 @@ void Sprinkler::resume_or_start_full_cycle() {
|
||||
}
|
||||
}
|
||||
|
||||
void Sprinkler::reset_resume() {
|
||||
this->paused_valve_.reset();
|
||||
this->resume_duration_.reset();
|
||||
}
|
||||
|
||||
const char *Sprinkler::valve_name(const size_t valve_number) {
|
||||
if (this->is_a_valid_valve(valve_number)) {
|
||||
return this->valve_[valve_number].controller_switch->get_name().c_str();
|
||||
@@ -1101,11 +1106,6 @@ void Sprinkler::reset_cycle_states_() {
|
||||
}
|
||||
}
|
||||
|
||||
void Sprinkler::reset_resume_() {
|
||||
this->paused_valve_.reset();
|
||||
this->resume_duration_.reset();
|
||||
}
|
||||
|
||||
void Sprinkler::fsm_request_(size_t requested_valve, uint32_t requested_run_duration) {
|
||||
this->next_req_.set_valve(requested_valve);
|
||||
this->next_req_.set_run_duration(requested_run_duration);
|
||||
|
||||
@@ -308,6 +308,9 @@ class Sprinkler : public Component, public EntityBase {
|
||||
/// if a cycle was suspended using pause(), resumes it. otherwise calls start_full_cycle()
|
||||
void resume_or_start_full_cycle();
|
||||
|
||||
/// resets resume state
|
||||
void reset_resume();
|
||||
|
||||
/// returns a pointer to a valve's name string object; returns nullptr if valve_number is invalid
|
||||
const char *valve_name(size_t valve_number);
|
||||
|
||||
@@ -401,9 +404,6 @@ class Sprinkler : public Component, public EntityBase {
|
||||
/// resets the cycle state for all valves
|
||||
void reset_cycle_states_();
|
||||
|
||||
/// resets resume state
|
||||
void reset_resume_();
|
||||
|
||||
/// make a request of the state machine
|
||||
void fsm_request_(size_t requested_valve, uint32_t requested_run_duration = 0);
|
||||
|
||||
|
||||
@@ -165,15 +165,19 @@ class Config(OrderedDict, fv.FinalValidateConfig):
|
||||
return err
|
||||
return None
|
||||
|
||||
def get_deepest_document_range_for_path(self, path):
|
||||
# type: (ConfigPath) -> Optional[ESPHomeDataBase]
|
||||
def get_deepest_document_range_for_path(self, path, get_key=False):
|
||||
# type: (ConfigPath, bool) -> Optional[ESPHomeDataBase]
|
||||
data = self
|
||||
doc_range = None
|
||||
for item_index in path:
|
||||
for index, path_item in enumerate(path):
|
||||
try:
|
||||
if item_index in data:
|
||||
doc_range = [x for x in data.keys() if x == item_index][0].esp_range
|
||||
data = data[item_index]
|
||||
if path_item in data:
|
||||
key_data = [x for x in data.keys() if x == path_item][0]
|
||||
if isinstance(key_data, ESPHomeDataBase):
|
||||
doc_range = key_data.esp_range
|
||||
if get_key and index == len(path) - 1:
|
||||
return doc_range
|
||||
data = data[path_item]
|
||||
except (KeyError, IndexError, TypeError, AttributeError):
|
||||
return doc_range
|
||||
if isinstance(data, core.ID):
|
||||
@@ -281,7 +285,7 @@ class ConfigValidationStep(abc.ABC):
|
||||
class LoadValidationStep(ConfigValidationStep):
|
||||
"""Load step, this step is called once for each domain config fragment.
|
||||
|
||||
Responsibilties:
|
||||
Responsibilities:
|
||||
- Load component code
|
||||
- Ensure all AUTO_LOADs are added
|
||||
- Set output paths of result
|
||||
@@ -738,6 +742,10 @@ def validate_config(config, command_line_substitutions) -> Config:
|
||||
result.add_validation_step(LoadValidationStep(key, config[key]))
|
||||
result.run_validation_steps()
|
||||
|
||||
if result.errors:
|
||||
# do not try to validate further as we don't know what the target is
|
||||
return result
|
||||
|
||||
for domain, conf in config.items():
|
||||
result.add_validation_step(LoadValidationStep(domain, conf))
|
||||
result.add_validation_step(IDPassValidationStep())
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
"""Constants used by esphome."""
|
||||
|
||||
__version__ = "2022.9.0b2"
|
||||
__version__ = "2022.9.0b5"
|
||||
|
||||
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
|
||||
|
||||
|
||||
@@ -179,7 +179,11 @@ def preload_core_config(config, result):
|
||||
]
|
||||
|
||||
if not has_oldstyle and not newstyle_found:
|
||||
raise cv.Invalid("Platform missing for core options!", [CONF_ESPHOME])
|
||||
raise cv.Invalid(
|
||||
"Platform missing. You must include one of the available platform keys: "
|
||||
+ ", ".join(TARGET_PLATFORMS),
|
||||
[CONF_ESPHOME],
|
||||
)
|
||||
if has_oldstyle and newstyle_found:
|
||||
raise cv.Invalid(
|
||||
f"Please remove the `platform` key from the [esphome] block. You're already using the new style with the [{conf[CONF_PLATFORM]}] block",
|
||||
|
||||
@@ -12,7 +12,9 @@ from typing import Optional
|
||||
|
||||
def _get_invalid_range(res, invalid):
|
||||
# type: (Config, cv.Invalid) -> Optional[DocumentRange]
|
||||
return res.get_deepest_document_range_for_path(invalid.path)
|
||||
return res.get_deepest_document_range_for_path(
|
||||
invalid.path, invalid.error_message == "extra keys not allowed"
|
||||
)
|
||||
|
||||
|
||||
def _dump_range(range):
|
||||
|
||||
@@ -9,7 +9,7 @@ pyserial==3.5
|
||||
platformio==6.0.2 # When updating platformio, also update Dockerfile
|
||||
esptool==3.3.1
|
||||
click==8.1.3
|
||||
esphome-dashboard==20220508.0
|
||||
esphome-dashboard==20220920.1
|
||||
aioesphomeapi==10.13.0
|
||||
zeroconf==0.39.1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user