mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 13:34:54 +01:00
ble_client rssi sensor fix when not connected (#5632)
This commit is contained in:
parent
d5aeb32ca6
commit
84bbf02bde
2 changed files with 16 additions and 4 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue