mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	ble_client rssi sensor fix when not connected (#5632)
This commit is contained in:
		| @@ -1,8 +1,8 @@ | |||||||
| #include "ble_rssi_sensor.h" | #include "ble_rssi_sensor.h" | ||||||
| #include "esphome/core/log.h" | #include "esphome/components/esp32_ble_tracker/esp32_ble_tracker.h" | ||||||
| #include "esphome/core/application.h" | #include "esphome/core/application.h" | ||||||
| #include "esphome/core/helpers.h" | #include "esphome/core/helpers.h" | ||||||
| #include "esphome/components/esp32_ble_tracker/esp32_ble_tracker.h" | #include "esphome/core/log.h" | ||||||
|  |  | ||||||
| #ifdef USE_ESP32 | #ifdef USE_ESP32 | ||||||
|  |  | ||||||
| @@ -37,6 +37,10 @@ void BLEClientRSSISensor::gattc_event_handler(esp_gattc_cb_event_t event, esp_ga | |||||||
|     } |     } | ||||||
|     case ESP_GATTC_SEARCH_CMPL_EVT: |     case ESP_GATTC_SEARCH_CMPL_EVT: | ||||||
|       this->node_state = espbt::ClientState::ESTABLISHED; |       this->node_state = espbt::ClientState::ESTABLISHED; | ||||||
|  |       if (this->should_update_) { | ||||||
|  |         this->should_update_ = false; | ||||||
|  |         this->get_rssi_(); | ||||||
|  |       } | ||||||
|       break; |       break; | ||||||
|     default: |     default: | ||||||
|       break; |       break; | ||||||
| @@ -50,6 +54,7 @@ void BLEClientRSSISensor::gap_event_handler(esp_gap_ble_cb_event_t event, esp_bl | |||||||
|       if (param->read_rssi_cmpl.status == ESP_BT_STATUS_SUCCESS) { |       if (param->read_rssi_cmpl.status == ESP_BT_STATUS_SUCCESS) { | ||||||
|         int8_t rssi = param->read_rssi_cmpl.rssi; |         int8_t rssi = param->read_rssi_cmpl.rssi; | ||||||
|         ESP_LOGI(TAG, "ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT RSSI: %d", rssi); |         ESP_LOGI(TAG, "ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT RSSI: %d", rssi); | ||||||
|  |         this->status_clear_warning(); | ||||||
|         this->publish_state(rssi); |         this->publish_state(rssi); | ||||||
|       } |       } | ||||||
|       break; |       break; | ||||||
| @@ -61,9 +66,12 @@ void BLEClientRSSISensor::gap_event_handler(esp_gap_ble_cb_event_t event, esp_bl | |||||||
| void BLEClientRSSISensor::update() { | void BLEClientRSSISensor::update() { | ||||||
|   if (this->node_state != espbt::ClientState::ESTABLISHED) { |   if (this->node_state != espbt::ClientState::ESTABLISHED) { | ||||||
|     ESP_LOGW(TAG, "[%s] Cannot poll, not connected", this->get_name().c_str()); |     ESP_LOGW(TAG, "[%s] Cannot poll, not connected", this->get_name().c_str()); | ||||||
|  |     this->should_update_ = true; | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|  |   this->get_rssi_(); | ||||||
|  | } | ||||||
|  | void BLEClientRSSISensor::get_rssi_() { | ||||||
|   ESP_LOGV(TAG, "requesting rssi from %s", this->parent()->address_str().c_str()); |   ESP_LOGV(TAG, "requesting rssi from %s", this->parent()->address_str().c_str()); | ||||||
|   auto status = esp_ble_gap_read_rssi(this->parent()->get_remote_bda()); |   auto status = esp_ble_gap_read_rssi(this->parent()->get_remote_bda()); | ||||||
|   if (status != ESP_OK) { |   if (status != ESP_OK) { | ||||||
|   | |||||||
| @@ -1,9 +1,9 @@ | |||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
| #include "esphome/core/component.h" |  | ||||||
| #include "esphome/components/ble_client/ble_client.h" | #include "esphome/components/ble_client/ble_client.h" | ||||||
| #include "esphome/components/esp32_ble_tracker/esp32_ble_tracker.h" | #include "esphome/components/esp32_ble_tracker/esp32_ble_tracker.h" | ||||||
| #include "esphome/components/sensor/sensor.h" | #include "esphome/components/sensor/sensor.h" | ||||||
|  | #include "esphome/core/component.h" | ||||||
|  |  | ||||||
| #ifdef USE_ESP32 | #ifdef USE_ESP32 | ||||||
| #include <esp_gattc_api.h> | #include <esp_gattc_api.h> | ||||||
| @@ -24,6 +24,10 @@ class BLEClientRSSISensor : public sensor::Sensor, public PollingComponent, publ | |||||||
|  |  | ||||||
|   void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if, |   void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if, | ||||||
|                            esp_ble_gattc_cb_param_t *param) override; |                            esp_ble_gattc_cb_param_t *param) override; | ||||||
|  |  | ||||||
|  |  protected: | ||||||
|  |   void get_rssi_(); | ||||||
|  |   bool should_update_{false}; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| }  // namespace ble_client | }  // namespace ble_client | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user