mirror of
https://github.com/esphome/esphome.git
synced 2025-01-19 04:20:56 +00:00
Improv_serial scan and send wifi networks list (#3116)
This commit is contained in:
parent
4a5970b4af
commit
bf91443f38
@ -56,7 +56,7 @@ async def to_code(config):
|
|||||||
cg.add(ble_server.register_service_component(var))
|
cg.add(ble_server.register_service_component(var))
|
||||||
|
|
||||||
cg.add_define("USE_IMPROV")
|
cg.add_define("USE_IMPROV")
|
||||||
cg.add_library("esphome/Improv", "1.1.0")
|
cg.add_library("esphome/Improv", "1.2.0")
|
||||||
|
|
||||||
cg.add(var.set_identify_duration(config[CONF_IDENTIFY_DURATION]))
|
cg.add(var.set_identify_duration(config[CONF_IDENTIFY_DURATION]))
|
||||||
cg.add(var.set_authorized_duration(config[CONF_AUTHORIZED_DURATION]))
|
cg.add(var.set_authorized_duration(config[CONF_AUTHORIZED_DURATION]))
|
||||||
|
@ -30,4 +30,4 @@ FINAL_VALIDATE_SCHEMA = validate_logger_baud_rate
|
|||||||
async def to_code(config):
|
async def to_code(config):
|
||||||
var = cg.new_Pvariable(config[CONF_ID])
|
var = cg.new_Pvariable(config[CONF_ID])
|
||||||
await cg.register_component(var, config)
|
await cg.register_component(var, config)
|
||||||
cg.add_library("esphome/Improv", "1.1.0")
|
cg.add_library("esphome/Improv", "1.2.0")
|
||||||
|
@ -24,6 +24,8 @@ void ImprovSerialComponent::setup() {
|
|||||||
|
|
||||||
if (wifi::global_wifi_component->has_sta()) {
|
if (wifi::global_wifi_component->has_sta()) {
|
||||||
this->state_ = improv::STATE_PROVISIONED;
|
this->state_ = improv::STATE_PROVISIONED;
|
||||||
|
} else {
|
||||||
|
wifi::global_wifi_component->start_scanning();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,6 +154,27 @@ bool ImprovSerialComponent::parse_improv_payload_(improv::ImprovCommand &command
|
|||||||
this->send_response_(info);
|
this->send_response_(info);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
case improv::GET_WIFI_NETWORKS: {
|
||||||
|
std::vector<std::string> networks;
|
||||||
|
auto results = wifi::global_wifi_component->get_scan_result();
|
||||||
|
for (auto &scan : results) {
|
||||||
|
if (scan.get_is_hidden())
|
||||||
|
continue;
|
||||||
|
const std::string &ssid = scan.get_ssid();
|
||||||
|
if (std::find(networks.begin(), networks.end(), ssid) != networks.end())
|
||||||
|
continue;
|
||||||
|
// Send each ssid separately to avoid overflowing the buffer
|
||||||
|
std::vector<uint8_t> data = improv::build_rpc_response(
|
||||||
|
improv::GET_WIFI_NETWORKS, {ssid, str_sprintf("%d", scan.get_rssi()), YESNO(scan.get_with_auth())}, false);
|
||||||
|
this->send_response_(data);
|
||||||
|
networks.push_back(ssid);
|
||||||
|
}
|
||||||
|
// Send empty response to signify the end of the list.
|
||||||
|
std::vector<uint8_t> data =
|
||||||
|
improv::build_rpc_response(improv::GET_WIFI_NETWORKS, std::vector<std::string>{}, false);
|
||||||
|
this->send_response_(data);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
ESP_LOGW(TAG, "Unknown Improv payload");
|
ESP_LOGW(TAG, "Unknown Improv payload");
|
||||||
this->set_error_(improv::ERROR_UNKNOWN_RPC);
|
this->set_error_(improv::ERROR_UNKNOWN_RPC);
|
||||||
|
@ -32,7 +32,7 @@ class ImprovSerialComponent : public Component {
|
|||||||
void loop() override;
|
void loop() override;
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
|
|
||||||
float get_setup_priority() const override { return setup_priority::HARDWARE; }
|
float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool parse_improv_serial_byte_(uint8_t byte);
|
bool parse_improv_serial_byte_(uint8_t byte);
|
||||||
|
@ -35,7 +35,7 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
esphome/noise-c@0.1.4 ; api
|
esphome/noise-c@0.1.4 ; api
|
||||||
makuna/NeoPixelBus@2.6.9 ; neopixelbus
|
makuna/NeoPixelBus@2.6.9 ; neopixelbus
|
||||||
esphome/Improv@1.1.0 ; improv_serial / esp32_improv
|
esphome/Improv@1.2.0 ; improv_serial / esp32_improv
|
||||||
bblanchon/ArduinoJson@6.18.5 ; json
|
bblanchon/ArduinoJson@6.18.5 ; json
|
||||||
wjtje/qr-code-generator-library@1.7.0 ; qr_code
|
wjtje/qr-code-generator-library@1.7.0 ; qr_code
|
||||||
build_flags =
|
build_flags =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user