1
0
mirror of https://github.com/esphome/esphome.git synced 2025-02-28 07:48:15 +00:00

Include the bluetooth mac address in the device info when proxy is enabled (#8203)

This commit is contained in:
J. Nick Koston 2025-02-27 13:37:11 +00:00 committed by GitHub
parent c19621e238
commit 63a7234767
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 22 additions and 0 deletions

View File

@ -227,6 +227,9 @@ message DeviceInfoResponse {
uint32 voice_assistant_feature_flags = 17; uint32 voice_assistant_feature_flags = 17;
string suggested_area = 16; string suggested_area = 16;
// The Bluetooth mac address of the device. For example "AC:BC:32:89:0E:AA"
string bluetooth_mac_address = 18;
} }
message ListEntitiesRequest { message ListEntitiesRequest {

View File

@ -1843,6 +1843,7 @@ DeviceInfoResponse APIConnection::device_info(const DeviceInfoRequest &msg) {
#ifdef USE_BLUETOOTH_PROXY #ifdef USE_BLUETOOTH_PROXY
resp.legacy_bluetooth_proxy_version = bluetooth_proxy::global_bluetooth_proxy->get_legacy_version(); resp.legacy_bluetooth_proxy_version = bluetooth_proxy::global_bluetooth_proxy->get_legacy_version();
resp.bluetooth_proxy_feature_flags = bluetooth_proxy::global_bluetooth_proxy->get_feature_flags(); resp.bluetooth_proxy_feature_flags = bluetooth_proxy::global_bluetooth_proxy->get_feature_flags();
resp.bluetooth_mac_address = bluetooth_proxy::global_bluetooth_proxy->get_bluetooth_mac_address_pretty();
#endif #endif
#ifdef USE_VOICE_ASSISTANT #ifdef USE_VOICE_ASSISTANT
resp.legacy_voice_assistant_version = voice_assistant::global_voice_assistant->get_legacy_version(); resp.legacy_voice_assistant_version = voice_assistant::global_voice_assistant->get_legacy_version();

View File

@ -838,6 +838,10 @@ bool DeviceInfoResponse::decode_length(uint32_t field_id, ProtoLengthDelimited v
this->suggested_area = value.as_string(); this->suggested_area = value.as_string();
return true; return true;
} }
case 18: {
this->bluetooth_mac_address = value.as_string();
return true;
}
default: default:
return false; return false;
} }
@ -860,6 +864,7 @@ void DeviceInfoResponse::encode(ProtoWriteBuffer buffer) const {
buffer.encode_uint32(14, this->legacy_voice_assistant_version); buffer.encode_uint32(14, this->legacy_voice_assistant_version);
buffer.encode_uint32(17, this->voice_assistant_feature_flags); buffer.encode_uint32(17, this->voice_assistant_feature_flags);
buffer.encode_string(16, this->suggested_area); buffer.encode_string(16, this->suggested_area);
buffer.encode_string(18, this->bluetooth_mac_address);
} }
#ifdef HAS_PROTO_MESSAGE_DUMP #ifdef HAS_PROTO_MESSAGE_DUMP
void DeviceInfoResponse::dump_to(std::string &out) const { void DeviceInfoResponse::dump_to(std::string &out) const {
@ -937,6 +942,10 @@ void DeviceInfoResponse::dump_to(std::string &out) const {
out.append(" suggested_area: "); out.append(" suggested_area: ");
out.append("'").append(this->suggested_area).append("'"); out.append("'").append(this->suggested_area).append("'");
out.append("\n"); out.append("\n");
out.append(" bluetooth_mac_address: ");
out.append("'").append(this->bluetooth_mac_address).append("'");
out.append("\n");
out.append("}"); out.append("}");
} }
#endif #endif

View File

@ -354,6 +354,7 @@ class DeviceInfoResponse : public ProtoMessage {
uint32_t legacy_voice_assistant_version{0}; uint32_t legacy_voice_assistant_version{0};
uint32_t voice_assistant_feature_flags{0}; uint32_t voice_assistant_feature_flags{0};
std::string suggested_area{}; std::string suggested_area{};
std::string bluetooth_mac_address{};
void encode(ProtoWriteBuffer buffer) const override; void encode(ProtoWriteBuffer buffer) const override;
#ifdef HAS_PROTO_MESSAGE_DUMP #ifdef HAS_PROTO_MESSAGE_DUMP
void dump_to(std::string &out) const override; void dump_to(std::string &out) const override;

View File

@ -15,6 +15,9 @@
#include "bluetooth_connection.h" #include "bluetooth_connection.h"
#include <esp_bt.h>
#include <esp_bt_device.h>
namespace esphome { namespace esphome {
namespace bluetooth_proxy { namespace bluetooth_proxy {
@ -114,6 +117,11 @@ class BluetoothProxy : public esp32_ble_tracker::ESPBTDeviceListener, public Com
return flags; return flags;
} }
std::string get_bluetooth_mac_address_pretty() {
const uint8_t *mac = esp_bt_dev_get_address();
return str_snprintf("%02X:%02X:%02X:%02X:%02X:%02X", 17, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
}
protected: protected:
void send_api_packet_(const esp32_ble_tracker::ESPBTDevice &device); void send_api_packet_(const esp32_ble_tracker::ESPBTDevice &device);