mirror of
https://github.com/esphome/esphome.git
synced 2025-01-07 13:21:44 +01:00
[ble] Allow setting shorter name for ble advertisements (#7867)
Co-authored-by: Keith Burzinski <kbx81x@gmail.com>
This commit is contained in:
parent
584dbf2668
commit
dc5942a59b
4 changed files with 38 additions and 8 deletions
|
@ -2,8 +2,10 @@ from esphome import automation
|
||||||
import esphome.codegen as cg
|
import esphome.codegen as cg
|
||||||
from esphome.components.esp32 import add_idf_sdkconfig_option, const, get_esp32_variant
|
from esphome.components.esp32 import add_idf_sdkconfig_option, const, get_esp32_variant
|
||||||
import esphome.config_validation as cv
|
import esphome.config_validation as cv
|
||||||
from esphome.const import CONF_ENABLE_ON_BOOT, CONF_ID
|
from esphome.const import CONF_ENABLE_ON_BOOT, CONF_ESPHOME, CONF_ID, CONF_NAME
|
||||||
from esphome.core import CORE
|
from esphome.core import CORE
|
||||||
|
from esphome.core.config import CONF_NAME_ADD_MAC_SUFFIX
|
||||||
|
import esphome.final_validate as fv
|
||||||
|
|
||||||
DEPENDENCIES = ["esp32"]
|
DEPENDENCIES = ["esp32"]
|
||||||
CODEOWNERS = ["@jesserockz", "@Rapsssito"]
|
CODEOWNERS = ["@jesserockz", "@Rapsssito"]
|
||||||
|
@ -50,6 +52,7 @@ TX_POWER_LEVELS = {
|
||||||
CONFIG_SCHEMA = cv.Schema(
|
CONFIG_SCHEMA = cv.Schema(
|
||||||
{
|
{
|
||||||
cv.GenerateID(): cv.declare_id(ESP32BLE),
|
cv.GenerateID(): cv.declare_id(ESP32BLE),
|
||||||
|
cv.Optional(CONF_NAME): cv.All(cv.string, cv.Length(max=20)),
|
||||||
cv.Optional(CONF_IO_CAPABILITY, default="none"): cv.enum(
|
cv.Optional(CONF_IO_CAPABILITY, default="none"): cv.enum(
|
||||||
IO_CAPABILITY, lower=True
|
IO_CAPABILITY, lower=True
|
||||||
),
|
),
|
||||||
|
@ -67,7 +70,22 @@ def validate_variant(_):
|
||||||
raise cv.Invalid(f"{variant} does not support Bluetooth")
|
raise cv.Invalid(f"{variant} does not support Bluetooth")
|
||||||
|
|
||||||
|
|
||||||
FINAL_VALIDATE_SCHEMA = validate_variant
|
def final_validation(config):
|
||||||
|
validate_variant(config)
|
||||||
|
if (name := config.get(CONF_NAME)) is not None:
|
||||||
|
full_config = fv.full_config.get()
|
||||||
|
max_length = 20
|
||||||
|
if full_config[CONF_ESPHOME][CONF_NAME_ADD_MAC_SUFFIX]:
|
||||||
|
max_length -= 7 # "-AABBCC" is appended when add mac suffix option is used
|
||||||
|
if len(name) > max_length:
|
||||||
|
raise cv.Invalid(
|
||||||
|
f"Name '{name}' is too long, maximum length is {max_length} characters"
|
||||||
|
)
|
||||||
|
|
||||||
|
return config
|
||||||
|
|
||||||
|
|
||||||
|
FINAL_VALIDATE_SCHEMA = final_validation
|
||||||
|
|
||||||
|
|
||||||
async def to_code(config):
|
async def to_code(config):
|
||||||
|
@ -75,6 +93,8 @@ async def to_code(config):
|
||||||
cg.add(var.set_enable_on_boot(config[CONF_ENABLE_ON_BOOT]))
|
cg.add(var.set_enable_on_boot(config[CONF_ENABLE_ON_BOOT]))
|
||||||
cg.add(var.set_io_capability(config[CONF_IO_CAPABILITY]))
|
cg.add(var.set_io_capability(config[CONF_IO_CAPABILITY]))
|
||||||
cg.add(var.set_advertising_cycle_time(config[CONF_ADVERTISING_CYCLE_TIME]))
|
cg.add(var.set_advertising_cycle_time(config[CONF_ADVERTISING_CYCLE_TIME]))
|
||||||
|
if (name := config.get(CONF_NAME)) is not None:
|
||||||
|
cg.add(var.set_name(name))
|
||||||
await cg.register_component(var, config)
|
await cg.register_component(var, config)
|
||||||
|
|
||||||
if CORE.using_esp_idf:
|
if CORE.using_esp_idf:
|
||||||
|
|
|
@ -188,12 +188,20 @@ bool ESP32BLE::ble_setup_() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string name = App.get_name();
|
std::string name;
|
||||||
if (name.length() > 20) {
|
if (this->name_.has_value()) {
|
||||||
|
name = this->name_.value();
|
||||||
if (App.is_name_add_mac_suffix_enabled()) {
|
if (App.is_name_add_mac_suffix_enabled()) {
|
||||||
name.erase(name.begin() + 13, name.end() - 7); // Remove characters between 13 and the mac address
|
name += "-" + get_mac_address().substr(6);
|
||||||
} else {
|
}
|
||||||
name = name.substr(0, 20);
|
} else {
|
||||||
|
name = App.get_name();
|
||||||
|
if (name.length() > 20) {
|
||||||
|
if (App.is_name_add_mac_suffix_enabled()) {
|
||||||
|
name.erase(name.begin() + 13, name.end() - 7); // Remove characters between 13 and the mac address
|
||||||
|
} else {
|
||||||
|
name = name.substr(0, 20);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,7 @@ class ESP32BLE : public Component {
|
||||||
void loop() override;
|
void loop() override;
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
float get_setup_priority() const override;
|
float get_setup_priority() const override;
|
||||||
|
void set_name(const std::string &name) { this->name_ = name; }
|
||||||
|
|
||||||
void advertising_start();
|
void advertising_start();
|
||||||
void advertising_set_service_data(const std::vector<uint8_t> &data);
|
void advertising_set_service_data(const std::vector<uint8_t> &data);
|
||||||
|
@ -131,6 +132,7 @@ class ESP32BLE : public Component {
|
||||||
esp_ble_io_cap_t io_cap_{ESP_IO_CAP_NONE};
|
esp_ble_io_cap_t io_cap_{ESP_IO_CAP_NONE};
|
||||||
uint32_t advertising_cycle_time_;
|
uint32_t advertising_cycle_time_;
|
||||||
bool enable_on_boot_;
|
bool enable_on_boot_;
|
||||||
|
optional<std::string> name_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
||||||
|
|
|
@ -83,7 +83,7 @@ esp_err_t BLEAdvertising::services_advertisement_() {
|
||||||
esp_err_t err;
|
esp_err_t err;
|
||||||
|
|
||||||
this->advertising_data_.set_scan_rsp = false;
|
this->advertising_data_.set_scan_rsp = false;
|
||||||
this->advertising_data_.include_name = !this->scan_response_;
|
this->advertising_data_.include_name = true;
|
||||||
this->advertising_data_.include_txpower = !this->scan_response_;
|
this->advertising_data_.include_txpower = !this->scan_response_;
|
||||||
err = esp_ble_gap_config_adv_data(&this->advertising_data_);
|
err = esp_ble_gap_config_adv_data(&this->advertising_data_);
|
||||||
if (err != ESP_OK) {
|
if (err != ESP_OK) {
|
||||||
|
|
Loading…
Reference in a new issue