mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Improv_serial scan and send wifi networks list (#3116)
This commit is contained in:
		| @@ -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 = | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user