ESPHome
2026.6.0-dev
Loading...
Searching...
No Matches
esphome
components
ble_scanner
ble_scanner.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <cinttypes>
4
#include <cstdio>
5
#include <ctime>
6
7
#include "
esphome/core/component.h
"
8
#include "
esphome/components/esp32_ble_tracker/esp32_ble_tracker.h
"
9
#include "
esphome/components/text_sensor/text_sensor.h
"
10
11
#ifdef USE_ESP32
12
13
namespace
esphome::ble_scanner
{
14
15
class
BLEScanner
:
public
text_sensor::TextSensor
,
public
esp32_ble_tracker::ESPBTDeviceListener
,
public
Component
{
16
public
:
17
bool
parse_device
(
const
esp32_ble_tracker::ESPBTDevice
&device)
override
{
18
char
addr_buf[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
19
// Escape special characters in the device name for valid JSON
20
const
char
*name = device.
get_name
().c_str();
21
char
escaped_name[128];
22
size_t
pos
= 0;
23
for
(; *name !=
'\0'
&&
pos
<
sizeof
(escaped_name) - 7; name++) {
24
uint8_t c =
static_cast<
uint8_t
>
(*name);
25
if
(c ==
'"'
|| c ==
'\\'
) {
26
escaped_name[
pos
++] =
'\\'
;
27
escaped_name[
pos
++] = c;
28
}
else
if
(c < 0x20) {
29
pos
+= snprintf(escaped_name +
pos
,
sizeof
(escaped_name) -
pos
,
"\\u%04x"
, c);
30
}
else
{
31
escaped_name[
pos
++] = c;
32
}
33
}
34
escaped_name[
pos
] =
'\0'
;
35
36
char
buf[256];
37
snprintf(buf,
sizeof
(buf),
"{\"timestamp\":%"
PRId64
",\"address\":\"%s\",\"rssi\":%d,\"name\":\"%s\"}"
,
38
static_cast<
int64_t
>
(::time(
nullptr
)), device.
address_str_to
(addr_buf), device.
get_rssi
(), escaped_name);
39
this->
publish_state
(buf);
40
return
true
;
41
}
42
void
dump_config
()
override
;
43
};
44
45
}
// namespace esphome::ble_scanner
46
47
#endif
esphome::Component
Definition
component.h:145
esphome::ble_scanner::BLEScanner
Definition
ble_scanner.h:15
esphome::ble_scanner::BLEScanner::dump_config
void dump_config() override
Definition
ble_scanner.cpp:10
esphome::ble_scanner::BLEScanner::parse_device
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override
Definition
ble_scanner.h:17
esphome::esp32_ble_tracker::ESPBTDevice
Definition
esp32_ble_tracker.h:78
esphome::esp32_ble_tracker::ESPBTDevice::address_str_to
const char * address_str_to(std::span< char, MAC_ADDRESS_PRETTY_BUFFER_SIZE > buf) const
Format MAC address into provided buffer, returns pointer to buffer for convenience.
Definition
esp32_ble_tracker.h:85
esphome::esp32_ble_tracker::ESPBTDevice::get_name
const std::string & get_name() const
Definition
esp32_ble_tracker.h:96
esphome::esp32_ble_tracker::ESPBTDevice::get_rssi
int get_rssi() const
Definition
esp32_ble_tracker.h:95
esphome::esp32_ble_tracker::ESPBTDeviceListener
Definition
esp32_ble_tracker.h:143
esphome::text_sensor::TextSensor
Definition
text_sensor.h:28
esphome::text_sensor::TextSensor::publish_state
void publish_state(const std::string &state)
Definition
text_sensor.cpp:21
component.h
esp32_ble_tracker.h
esphome::ble_scanner
Definition
ble_scanner.cpp:6
esphome::pos
size_t size_t pos
Definition
helpers.h:1038
text_sensor.h
Generated by
1.12.0