wip
This commit is contained in:
39
components/esp32_nimble_mqtt_room/__init__.py
Normal file
39
components/esp32_nimble_mqtt_room/__init__.py
Normal file
@@ -0,0 +1,39 @@
|
||||
import esphome.config_validation as cv
|
||||
import esphome.codegen as cg
|
||||
from esphome.const import (
|
||||
CONF_ID,
|
||||
)
|
||||
from esphome.components import mqtt, nimble_tracker
|
||||
|
||||
DEPENDENCIES = ["mqtt"]
|
||||
AUTO_LOAD=["nimble_distance_custom"]
|
||||
|
||||
CONF_NIMBLE_ID = "esp32_nimble_mqtt_room"
|
||||
|
||||
CONF_ROOM_KEY = 'room'
|
||||
CONF_BASE_TOPIC_KEY = 'base_topic'
|
||||
# CONF_MY_OPTIONAL_KEY = 'my_optional_key'
|
||||
CONF_MAC_KEY = 'mac_addr'
|
||||
|
||||
esp32_nimble_tracker_ns = cg.esphome_ns.namespace("esp32_nimble_mqtt_room")
|
||||
ESP32NimbleMQTTRoom = esp32_nimble_tracker_ns.class_(
|
||||
"ESP32NimbleMQTTRoom", cg.Component, nimble_tracker.NimbleDeviceListener
|
||||
)
|
||||
|
||||
CONFIG_SCHEMA = cv.Schema({
|
||||
cv.GenerateID(): cv.declare_id(ESP32NimbleMQTTRoom),
|
||||
cv.Required(CONF_ROOM_KEY): cv.string,
|
||||
cv.Required(CONF_MAC_KEY): cv.All(cv.ensure_list(cv.string)),
|
||||
cv.Optional(CONF_BASE_TOPIC_KEY, default="esphome_presense"): cv.string,
|
||||
}).extend(cv.COMPONENT_SCHEMA).extend(nimble_tracker.NIMBLE_DEVICE_LISTENER_SCHEMA)
|
||||
|
||||
async def to_code(config):
|
||||
var = cg.new_Pvariable(config[CONF_ID])
|
||||
await cg.register_component(var, config)
|
||||
|
||||
cg.add(var.set_room(config[CONF_ROOM_KEY]))
|
||||
cg.add(var.set_base_topic(config[CONF_BASE_TOPIC_KEY]))
|
||||
cg.add(var.set_addresses(config[CONF_MAC_KEY]))
|
||||
|
||||
await nimble_tracker.device_listener_to_code(var, config)
|
||||
await nimble_tracker.register_ble_device(var, config)
|
20
components/esp32_nimble_mqtt_room/esp32_nimble_mqtt_room.cpp
Normal file
20
components/esp32_nimble_mqtt_room/esp32_nimble_mqtt_room.cpp
Normal file
@@ -0,0 +1,20 @@
|
||||
#include "esp32_nimble_mqtt_room.h"
|
||||
|
||||
namespace esphome
|
||||
{
|
||||
namespace esp32_nimble_mqtt_room
|
||||
{
|
||||
void ESP32NimbleMQTTRoom::on_result(nimble_distance_custom::NimbleDistanceCustomResult& result)
|
||||
{
|
||||
auto address = result.address.toString();
|
||||
|
||||
this->publish_json(
|
||||
this->base_topic_ + "/devices/" + address + "/" + this->room_,
|
||||
[=](ArduinoJson::JsonObject root) -> void {
|
||||
root["id"] = address;
|
||||
root["distance"] = result.distance;
|
||||
}
|
||||
);
|
||||
};
|
||||
} // namespace esp32_nimble_tracker
|
||||
} // namespace esphome
|
24
components/esp32_nimble_mqtt_room/esp32_nimble_mqtt_room.h
Normal file
24
components/esp32_nimble_mqtt_room/esp32_nimble_mqtt_room.h
Normal file
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
|
||||
#include "esphome/core/component.h"
|
||||
#include "esphome/components/mqtt/custom_mqtt_device.h"
|
||||
#include "esphome/components/nimble_distance_custom/nimble_distance_custom.h"
|
||||
|
||||
namespace esphome
|
||||
{
|
||||
namespace esp32_nimble_mqtt_room
|
||||
{
|
||||
class ESP32NimbleMQTTRoom :
|
||||
public mqtt::CustomMQTTDevice,
|
||||
public nimble_distance_custom::NimbleDistanceCustomComponent
|
||||
{
|
||||
protected:
|
||||
std::string room_;
|
||||
std::string base_topic_ = "esphome_presense";
|
||||
public:
|
||||
void on_result(nimble_distance_custom::NimbleDistanceCustomResult&) override;
|
||||
void set_room(std::string room) { room_ = room; }
|
||||
void set_base_topic(std::string base_topic) { base_topic_ = base_topic; }
|
||||
};
|
||||
} // namespace esp32_nimble_tracker
|
||||
} // namespace esphome
|
Reference in New Issue
Block a user