Зробимо простий Bluetooth трекер на ESP32, який буде відображатися в Home Assistant, дозволяючи відстежувати ключі, гаманці або інші цінні речі.
Контекст і проблема
Постійна втрата дрібних речей – звична проблема для багатьох. Традиційні Bluetooth трекери, як Tile або Apple AirTag, прив’язані до конкретної екосистеми. Використання ESP32 дозволяє створити альтернативу з відкритим кодом та інтеграцією з Home Assistant, що дає повний контроль над даними та функціональністю.
Практична реалізація
Проект складається з прошивки ESP32, яка періодично публікує Bluetooth-адресу та RSSI (Received Signal Strength Indicator) в MQTT брокер, та конфігурації Home Assistant для підписки на ці повідомлення та відображення їх на карті.
#include <WiFi.h>
#include <PubSubClient.h>
#include <BluetoothSerial.h>
const char* mqtt_server = "your_mqtt_server";
const char* mqtt_topic = "homeassistant/bluetooth_tracker";
const char* mqtt_username = "your_mqtt_username";
const char* mqtt_password = "your_mqtt_password";
WiFiClient mqttClient;
PubSubClient mqtt(mqttClient);
BluetoothSerial SerialBT;
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32-Tracker"); // Ім'я Bluetooth пристрою
mqtt.setServer(mqtt_server, 1883);
mqtt.setCredentials(mqtt_username, mqtt_password);
}
void loop() {
if (!mqtt.connected()) {
Serial.println("Connecting to MQTT...");
mqtt.connect();
}
if (mqtt.connected()) {
String payload = "{\"friendly_name\":\"ESP32 Tracker\",\"battery\":100,\"rssi\":";
int rssi = SerialBT.getRSSI();
payload += String(rssi) + ",\"major\":0,\"minor\":0,\"device_id\":\"" + String(SerialBT.getDeviceAddress()) + "\"}";
Serial.println(payload);
mqtt.publish(mqtt_topic, payload.c_str());
delay(60000); // Публікуємо кожні 60 секунд
} else {
Serial.println("MQTT Disconnected");
delay(5000);
}
}
Цей код використовує бібліотеки WiFi, PubSubClient та BluetoothSerial. Періодично він зчитує RSSI з Bluetooth та публікує дані в MQTT топік. Home Assistant підписується на цей топік, отримує дані та відображає місцезнаходження трекера на карті. Зміна RSSI дозволяє оцінювати відстань до трекера.
Типові помилки
- Помилка 1: Неправильні налаштування MQTT: Симптом – ESP32 не підключається до MQTT брокера. Виправлення – Перевірте ім’я сервера, порт, логін та пароль. Використовуйте `mqtt.state()` для діагностики.
- Помилка 2: Неправильний MQTT Topic: Home Assistant не бачить трекер. Перевірте, чи правильно вказано MQTT topic в коді ESP32 та налаштуваннях Home Assistant. Неправильний topic може призвести до того, що Home Assistant просто не отримує повідомлення.
- Помилка 3: Bluetooth Interference: RSSI може бути неточним через перешкоди. Поекспериментуйте з розташуванням ESP32 та трекера, щоб мінімізувати перешкоди від інших Bluetooth пристроїв. Використання 2.4GHz Wi-Fi може впливати на RSSI.
Результат
Після налаштування, трекер з’являється в Home Assistant як окреме пристрій. Зміна положення трекера відображається на карті з точністю до 5-10 метрів (залежно від RSSI). Час відстеження стає майже миттєвим, порівняно з ручним пошуком, що заощаджує в середньому 3 хвилини на тиждень.