mirror of
				https://github.com/esphome/esphome.git
				synced 2025-11-04 09:01:49 +00:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			2024.3.2
			...
			oral-b-bru
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					a85b7b3f84 | ||
| 
						 | 
					a207ed08a9 | ||
| 
						 | 
					90c3cb62b3 | 
							
								
								
									
										18
									
								
								esphome/components/oralb_ble/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								esphome/components/oralb_ble/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
import esphome.codegen as cg
 | 
			
		||||
import esphome.config_validation as cv
 | 
			
		||||
from esphome.components import esp32_ble_tracker
 | 
			
		||||
from esphome.const import CONF_ID
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['esp32_ble_tracker']
 | 
			
		||||
 | 
			
		||||
oralb_ble_ns = cg.esphome_ns.namespace('oralb_ble')
 | 
			
		||||
OralbListener = oralb_ble_ns.class_('OralbListener', esp32_ble_tracker.ESPBTDeviceListener)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = cv.Schema({
 | 
			
		||||
    cv.GenerateID(): cv.declare_id(OralbListener),
 | 
			
		||||
}).extend(esp32_ble_tracker.ESP_BLE_DEVICE_SCHEMA)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    var = cg.new_Pvariable(config[CONF_ID])
 | 
			
		||||
    yield esp32_ble_tracker.register_ble_device(var, config)
 | 
			
		||||
							
								
								
									
										48
									
								
								esphome/components/oralb_ble/oralb_ble.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								esphome/components/oralb_ble/oralb_ble.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
#include "oralb_ble.h"
 | 
			
		||||
#include "esphome/core/log.h"
 | 
			
		||||
 | 
			
		||||
#ifdef USE_ESP32
 | 
			
		||||
 | 
			
		||||
namespace esphome {
 | 
			
		||||
namespace oralb_ble {
 | 
			
		||||
 | 
			
		||||
static const char *const TAG = "oralb_ble";
 | 
			
		||||
 | 
			
		||||
bool parse_oralb_data_byte(const esp32_ble_tracker::adv_data_t &adv_data, OralbParseResult &result) {
 | 
			
		||||
  result.state = adv_data[3];
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
optional<OralbParseResult> parse_oralb(const esp32_ble_tracker::ESPBTDevice &device) {
 | 
			
		||||
  bool success = false;
 | 
			
		||||
  OralbParseResult result{};
 | 
			
		||||
  for (auto &it : device.get_manufacturer_datas()) {
 | 
			
		||||
    bool is_oralb = it.uuid.contains(0xDC, 0x00);
 | 
			
		||||
    if (!is_oralb)
 | 
			
		||||
      continue;
 | 
			
		||||
 | 
			
		||||
    if (parse_oralb_data_byte(it.data, result))
 | 
			
		||||
      success = true;
 | 
			
		||||
  }
 | 
			
		||||
  if (!success)
 | 
			
		||||
    return {};
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool OralbListener::parse_device(const esp32_ble_tracker::ESPBTDevice &device) {
 | 
			
		||||
  auto res = parse_oralb(device);
 | 
			
		||||
  if (!res.has_value())
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  ESP_LOGD(TAG, "Got OralB (%s):", device.address_str().c_str());
 | 
			
		||||
 | 
			
		||||
  if (res->state.has_value()) {
 | 
			
		||||
    ESP_LOGD(TAG, "  State: %d", *res->state);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace oralb_ble
 | 
			
		||||
}  // namespace esphome
 | 
			
		||||
 | 
			
		||||
#endif  // USE_ESP32
 | 
			
		||||
							
								
								
									
										27
									
								
								esphome/components/oralb_ble/oralb_ble.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								esphome/components/oralb_ble/oralb_ble.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "esphome/core/component.h"
 | 
			
		||||
#include "esphome/components/esp32_ble_tracker/esp32_ble_tracker.h"
 | 
			
		||||
 | 
			
		||||
#ifdef USE_ESP32
 | 
			
		||||
 | 
			
		||||
namespace esphome {
 | 
			
		||||
namespace oralb_ble {
 | 
			
		||||
 | 
			
		||||
struct OralbParseResult {
 | 
			
		||||
  optional<uint8_t> state;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
bool parse_oralb_data_byte(uint8_t data_type, const uint8_t *data, uint8_t data_length, OralbParseResult &result);
 | 
			
		||||
 | 
			
		||||
optional<OralbParseResult> parse_oralb(const esp32_ble_tracker::ESPBTDevice &device);
 | 
			
		||||
 | 
			
		||||
class OralbListener : public esp32_ble_tracker::ESPBTDeviceListener {
 | 
			
		||||
 public:
 | 
			
		||||
  bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace oralb_ble
 | 
			
		||||
}  // namespace esphome
 | 
			
		||||
 | 
			
		||||
#endif  // USE_ESP32
 | 
			
		||||
							
								
								
									
										0
									
								
								esphome/components/oralb_brush/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								esphome/components/oralb_brush/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										33
									
								
								esphome/components/oralb_brush/oralb_brush.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								esphome/components/oralb_brush/oralb_brush.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
#include "oralb_brush.h"
 | 
			
		||||
#include "esphome/core/log.h"
 | 
			
		||||
 | 
			
		||||
#ifdef USE_ESP32
 | 
			
		||||
 | 
			
		||||
namespace esphome {
 | 
			
		||||
namespace oralb_brush {
 | 
			
		||||
 | 
			
		||||
static const char *const TAG = "oralb_brush";
 | 
			
		||||
 | 
			
		||||
void OralbBrush::dump_config() {
 | 
			
		||||
  ESP_LOGCONFIG(TAG, "OralbBrush");
 | 
			
		||||
  LOG_SENSOR("  ", "State", this->state_);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool OralbBrush::parse_device(const esp32_ble_tracker::ESPBTDevice &device) {
 | 
			
		||||
  if (device.address_uint64() != this->address_)
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  auto res = oralb_ble::parse_oralb(device);
 | 
			
		||||
  if (!res.has_value())
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  if (res->state.has_value() && this->state_ != nullptr)
 | 
			
		||||
    this->state_->publish_state(*res->state);
 | 
			
		||||
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace oralb_brush
 | 
			
		||||
}  // namespace esphome
 | 
			
		||||
 | 
			
		||||
#endif  // USE_ESP32
 | 
			
		||||
							
								
								
									
										31
									
								
								esphome/components/oralb_brush/oralb_brush.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								esphome/components/oralb_brush/oralb_brush.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "esphome/core/component.h"
 | 
			
		||||
#include "esphome/components/sensor/sensor.h"
 | 
			
		||||
#include "esphome/components/esp32_ble_tracker/esp32_ble_tracker.h"
 | 
			
		||||
#include "esphome/components/oralb_ble/oralb_ble.h"
 | 
			
		||||
 | 
			
		||||
#ifdef USE_ESP32
 | 
			
		||||
 | 
			
		||||
namespace esphome {
 | 
			
		||||
namespace oralb_brush {
 | 
			
		||||
 | 
			
		||||
class OralbBrush : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
 | 
			
		||||
 public:
 | 
			
		||||
  void set_address(uint64_t address) { address_ = address; }
 | 
			
		||||
 | 
			
		||||
  bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
 | 
			
		||||
 | 
			
		||||
  void dump_config() override;
 | 
			
		||||
  float get_setup_priority() const override { return setup_priority::DATA; }
 | 
			
		||||
  void set_state(sensor::Sensor *state) { state_ = state; }
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  uint64_t address_;
 | 
			
		||||
  sensor::Sensor *state_{nullptr};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace oralb_brush
 | 
			
		||||
}  // namespace esphome
 | 
			
		||||
 | 
			
		||||
#endif  // USE_ESP32
 | 
			
		||||
							
								
								
									
										36
									
								
								esphome/components/oralb_brush/sensor.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								esphome/components/oralb_brush/sensor.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
import esphome.codegen as cg
 | 
			
		||||
import esphome.config_validation as cv
 | 
			
		||||
from esphome.components import sensor, esp32_ble_tracker
 | 
			
		||||
from esphome.const import CONF_MAC_ADDRESS, CONF_ID, CONF_STATE
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ["esp32_ble_tracker"]
 | 
			
		||||
AUTO_LOAD = ["oralb_ble"]
 | 
			
		||||
 | 
			
		||||
oralb_brush_ns = cg.esphome_ns.namespace("oralb_brush")
 | 
			
		||||
OralbBrush = oralb_brush_ns.class_(
 | 
			
		||||
    "OralbBrush", esp32_ble_tracker.ESPBTDeviceListener, cg.Component
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = (
 | 
			
		||||
    cv.Schema(
 | 
			
		||||
        {
 | 
			
		||||
            cv.GenerateID(): cv.declare_id(OralbBrush),
 | 
			
		||||
            cv.Required(CONF_MAC_ADDRESS): cv.mac_address,
 | 
			
		||||
            cv.Optional(CONF_STATE): sensor.sensor_schema(accuracy_decimals=0),
 | 
			
		||||
        }
 | 
			
		||||
    )
 | 
			
		||||
    .extend(esp32_ble_tracker.ESP_BLE_DEVICE_SCHEMA)
 | 
			
		||||
    .extend(cv.COMPONENT_SCHEMA)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    var = cg.new_Pvariable(config[CONF_ID])
 | 
			
		||||
    yield cg.register_component(var, config)
 | 
			
		||||
    yield esp32_ble_tracker.register_ble_device(var, config)
 | 
			
		||||
 | 
			
		||||
    cg.add(var.set_address(config[CONF_MAC_ADDRESS].as_hex))
 | 
			
		||||
 | 
			
		||||
    if CONF_STATE in config:
 | 
			
		||||
        sens = yield sensor.new_sensor(config[CONF_STATE])
 | 
			
		||||
        cg.add(var.set_state(sens))
 | 
			
		||||
		Reference in New Issue
	
	Block a user