mirror of
https://github.com/esphome/esphome.git
synced 2025-03-15 07:08:20 +00:00
add model a02yytw (uart controlled)
This commit is contained in:
parent
387bde665e
commit
4b0261fe71
@ -12,7 +12,7 @@ esphome/core/* @esphome/core
|
|||||||
|
|
||||||
# Integrations
|
# Integrations
|
||||||
esphome/components/a01nyub/* @MrSuicideParrot
|
esphome/components/a01nyub/* @MrSuicideParrot
|
||||||
esphome/components/a02yyuw/* @TH-Braemer
|
esphome/components/a02yyuw/* @TH-Braemer @alexandrezia
|
||||||
esphome/components/absolute_humidity/* @DAVe3283
|
esphome/components/absolute_humidity/* @DAVe3283
|
||||||
esphome/components/ac_dimmer/* @glmnet
|
esphome/components/ac_dimmer/* @glmnet
|
||||||
esphome/components/adc/* @esphome/core
|
esphome/components/adc/* @esphome/core
|
||||||
|
@ -1 +1 @@
|
|||||||
CODEOWNERS = ["@TH-Braemer"]
|
CODEOWNERS = ["@TH-Braemer", "@alexandrezia"]
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Datasheet https://wiki.dfrobot.com/_A02YYUW_Waterproof_Ultrasonic_Sensor_SKU_SEN0311
|
// Datasheet https://www.dypcn.com/uploads/A02-Datasheet.pdf
|
||||||
|
|
||||||
#include "a02yyuw.h"
|
#include "a02yyuw.h"
|
||||||
#include "esphome/core/helpers.h"
|
#include "esphome/core/helpers.h"
|
||||||
@ -9,6 +9,13 @@ namespace a02yyuw {
|
|||||||
|
|
||||||
static const char *const TAG = "a02yyuw.sensor";
|
static const char *const TAG = "a02yyuw.sensor";
|
||||||
|
|
||||||
|
void A02yyuwComponent::update() {
|
||||||
|
if (this->model_ == A02YYTW) {
|
||||||
|
this->write_byte(0xFF);
|
||||||
|
ESP_LOGV(TAG, "Request read out from sensor");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void A02yyuwComponent::loop() {
|
void A02yyuwComponent::loop() {
|
||||||
uint8_t data;
|
uint8_t data;
|
||||||
while (this->available() > 0) {
|
while (this->available() > 0) {
|
||||||
@ -37,7 +44,17 @@ void A02yyuwComponent::check_buffer_() {
|
|||||||
this->buffer_.clear();
|
this->buffer_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void A02yyuwComponent::dump_config() { LOG_SENSOR("", "A02yyuw Sensor", this); }
|
void A02yyuwComponent::dump_config() {
|
||||||
|
switch (this->model_) {
|
||||||
|
case A02YYUW:
|
||||||
|
ESP_LOGCONFIG(TAG, " sensor model: a02yyuw");
|
||||||
|
break;
|
||||||
|
case A02YYTW:
|
||||||
|
ESP_LOGCONFIG(TAG, " sensor model: a02yytw");
|
||||||
|
LOG_UPDATE_INTERVAL(this);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace a02yyuw
|
} // namespace a02yyuw
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
@ -9,16 +9,23 @@
|
|||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace a02yyuw {
|
namespace a02yyuw {
|
||||||
|
|
||||||
class A02yyuwComponent : public sensor::Sensor, public Component, public uart::UARTDevice {
|
enum Model {
|
||||||
|
A02YYUW,
|
||||||
|
A02YYTW,
|
||||||
|
};
|
||||||
|
|
||||||
|
class A02yyuwComponent : public sensor::Sensor, public PollingComponent, public uart::UARTDevice {
|
||||||
public:
|
public:
|
||||||
// Nothing really public.
|
void set_model(Model model) { this->model_ = model; }
|
||||||
|
|
||||||
// ========== INTERNAL METHODS ==========
|
// ========== INTERNAL METHODS ==========
|
||||||
|
void update() override;
|
||||||
void loop() override;
|
void loop() override;
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void check_buffer_();
|
void check_buffer_();
|
||||||
|
Model model_;
|
||||||
|
|
||||||
std::vector<uint8_t> buffer_;
|
std::vector<uint8_t> buffer_;
|
||||||
};
|
};
|
||||||
|
@ -1,41 +1,71 @@
|
|||||||
import esphome.codegen as cg
|
import esphome.codegen as cg
|
||||||
from esphome.components import sensor, uart
|
from esphome.components import sensor, uart
|
||||||
|
import esphome.config_validation as cv
|
||||||
from esphome.const import (
|
from esphome.const import (
|
||||||
STATE_CLASS_MEASUREMENT,
|
CONF_MODEL,
|
||||||
ICON_ARROW_EXPAND_VERTICAL,
|
CONF_UPDATE_INTERVAL,
|
||||||
DEVICE_CLASS_DISTANCE,
|
DEVICE_CLASS_DISTANCE,
|
||||||
|
ICON_ARROW_EXPAND_VERTICAL,
|
||||||
|
STATE_CLASS_MEASUREMENT,
|
||||||
UNIT_MILLIMETER,
|
UNIT_MILLIMETER,
|
||||||
)
|
)
|
||||||
|
|
||||||
CODEOWNERS = ["@TH-Braemer"]
|
CODEOWNERS = ["@TH-Braemer", "@alexandrezia"]
|
||||||
DEPENDENCIES = ["uart"]
|
DEPENDENCIES = ["uart"]
|
||||||
|
|
||||||
a02yyuw_ns = cg.esphome_ns.namespace("a02yyuw")
|
a02yyuw_ns = cg.esphome_ns.namespace("a02yyuw")
|
||||||
A02yyuwComponent = a02yyuw_ns.class_(
|
A02yyuwComponent = a02yyuw_ns.class_(
|
||||||
"A02yyuwComponent", sensor.Sensor, cg.Component, uart.UARTDevice
|
"A02yyuwComponent", sensor.Sensor, cg.PollingComponent, uart.UARTDevice
|
||||||
|
)
|
||||||
|
Model = a02yyuw_ns.enum("Model")
|
||||||
|
MODEL = {
|
||||||
|
"a02yyuw": Model.A02YYUW,
|
||||||
|
"a02yytw": Model.A02YYTW,
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG_SCHEMA = (
|
||||||
|
sensor.sensor_schema(
|
||||||
|
A02yyuwComponent,
|
||||||
|
unit_of_measurement=UNIT_MILLIMETER,
|
||||||
|
icon=ICON_ARROW_EXPAND_VERTICAL,
|
||||||
|
accuracy_decimals=0,
|
||||||
|
state_class=STATE_CLASS_MEASUREMENT,
|
||||||
|
device_class=DEVICE_CLASS_DISTANCE,
|
||||||
|
)
|
||||||
|
.extend(cv.polling_component_schema("100ms"))
|
||||||
|
.extend(uart.UART_DEVICE_SCHEMA)
|
||||||
|
.extend(
|
||||||
|
{
|
||||||
|
cv.Optional(CONF_MODEL, default="a02yyuw"): cv.enum(MODEL, upper=False),
|
||||||
|
}
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
CONFIG_SCHEMA = sensor.sensor_schema(
|
|
||||||
A02yyuwComponent,
|
|
||||||
unit_of_measurement=UNIT_MILLIMETER,
|
|
||||||
icon=ICON_ARROW_EXPAND_VERTICAL,
|
|
||||||
accuracy_decimals=0,
|
|
||||||
state_class=STATE_CLASS_MEASUREMENT,
|
|
||||||
device_class=DEVICE_CLASS_DISTANCE,
|
|
||||||
).extend(uart.UART_DEVICE_SCHEMA)
|
|
||||||
|
|
||||||
FINAL_VALIDATE_SCHEMA = uart.final_validate_device_schema(
|
def final_validation(config):
|
||||||
"a02yyuw",
|
require_tx = True
|
||||||
baud_rate=9600,
|
if config[CONF_MODEL] == "a02yyuw":
|
||||||
require_tx=False,
|
config.pop(CONF_UPDATE_INTERVAL, None)
|
||||||
require_rx=True,
|
require_tx = False
|
||||||
data_bits=8,
|
schema = uart.final_validate_device_schema(
|
||||||
parity=None,
|
"a02yyuw",
|
||||||
stop_bits=1,
|
baud_rate=9600,
|
||||||
)
|
require_tx=require_tx,
|
||||||
|
require_rx=True,
|
||||||
|
data_bits=8,
|
||||||
|
parity=None,
|
||||||
|
stop_bits=1,
|
||||||
|
)
|
||||||
|
schema(config)
|
||||||
|
|
||||||
|
|
||||||
|
FINAL_VALIDATE_SCHEMA = final_validation
|
||||||
|
|
||||||
|
|
||||||
async def to_code(config):
|
async def to_code(config):
|
||||||
var = await sensor.new_sensor(config)
|
var = await sensor.new_sensor(config)
|
||||||
await cg.register_component(var, config)
|
await cg.register_component(var, config)
|
||||||
await uart.register_uart_device(var, config)
|
await uart.register_uart_device(var, config)
|
||||||
|
cg.add(var.set_model(config[CONF_MODEL]))
|
||||||
|
if CONF_UPDATE_INTERVAL in config:
|
||||||
|
cg.add(var.set_update_interval(config[CONF_UPDATE_INTERVAL]))
|
||||||
|
31
tests/components/a02yyuw/common.yaml
Normal file
31
tests/components/a02yyuw/common.yaml
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
uart:
|
||||||
|
- id: uart_a02yyuw
|
||||||
|
tx_pin: ${tx_pin}
|
||||||
|
rx_pin: ${rx_pin}
|
||||||
|
baud_rate: 9600
|
||||||
|
|
||||||
|
sensor:
|
||||||
|
- platform: a02yyuw
|
||||||
|
id: a02yyuw_sensor
|
||||||
|
name: a02yyuw Distance
|
||||||
|
uart_id: uart_a02yyuw
|
||||||
|
|
||||||
|
- platform: a02yyuw
|
||||||
|
model: a02yyuw
|
||||||
|
id: a02yyuw_sensor_model
|
||||||
|
name: a02yyuw Distance Model
|
||||||
|
uart_id: uart_a02yyuw
|
||||||
|
|
||||||
|
- platform: a02yyuw
|
||||||
|
model: a02yytw
|
||||||
|
id: a02yytw_sensor_model
|
||||||
|
name: a02yytw Distance Model
|
||||||
|
uart_id: uart_a02yyuw
|
||||||
|
|
||||||
|
- platform: a02yyuw
|
||||||
|
model: a02yytw
|
||||||
|
update_interval: 500ms
|
||||||
|
id: a02yytw_sensor_model_interval
|
||||||
|
name: a02yyuw Distance Model Interval
|
||||||
|
uart_id: uart_a02yyuw
|
||||||
|
|
@ -1,13 +1,5 @@
|
|||||||
uart:
|
substitutions:
|
||||||
- id: uart_a02yyuw
|
tx_pin: GPIO17
|
||||||
tx_pin:
|
rx_pin: GPIO16
|
||||||
number: 17
|
|
||||||
rx_pin:
|
|
||||||
number: 16
|
|
||||||
baud_rate: 9600
|
|
||||||
|
|
||||||
sensor:
|
<<: !include common.yaml
|
||||||
- platform: a02yyuw
|
|
||||||
id: a02yyuw_sensor
|
|
||||||
name: a02yyuw Distance
|
|
||||||
uart_id: uart_a02yyuw
|
|
||||||
|
@ -1,13 +1,5 @@
|
|||||||
uart:
|
substitutions:
|
||||||
- id: uart_a02yyuw
|
tx_pin: GPIO4
|
||||||
tx_pin:
|
rx_pin: GPIO5
|
||||||
number: 4
|
|
||||||
rx_pin:
|
|
||||||
number: 5
|
|
||||||
baud_rate: 9600
|
|
||||||
|
|
||||||
sensor:
|
<<: !include common.yaml
|
||||||
- platform: a02yyuw
|
|
||||||
id: a02yyuw_sensor
|
|
||||||
name: a02yyuw Distance
|
|
||||||
uart_id: uart_a02yyuw
|
|
||||||
|
@ -1,13 +1,5 @@
|
|||||||
uart:
|
substitutions:
|
||||||
- id: uart_a02yyuw
|
tx_pin: GPIO4
|
||||||
tx_pin:
|
rx_pin: GPIO5
|
||||||
number: 4
|
|
||||||
rx_pin:
|
|
||||||
number: 5
|
|
||||||
baud_rate: 9600
|
|
||||||
|
|
||||||
sensor:
|
<<: !include common.yaml
|
||||||
- platform: a02yyuw
|
|
||||||
id: a02yyuw_sensor
|
|
||||||
name: a02yyuw Distance
|
|
||||||
uart_id: uart_a02yyuw
|
|
||||||
|
@ -1,13 +1,6 @@
|
|||||||
uart:
|
substitutions:
|
||||||
- id: uart_a02yyuw
|
tx_pin: GPIO17
|
||||||
tx_pin:
|
rx_pin: GPIO16
|
||||||
number: 17
|
|
||||||
rx_pin:
|
<<: !include common.yaml
|
||||||
number: 16
|
|
||||||
baud_rate: 9600
|
|
||||||
|
|
||||||
sensor:
|
|
||||||
- platform: a02yyuw
|
|
||||||
id: a02yyuw_sensor
|
|
||||||
name: a02yyuw Distance
|
|
||||||
uart_id: uart_a02yyuw
|
|
||||||
|
@ -1,13 +1,5 @@
|
|||||||
uart:
|
substitutions:
|
||||||
- id: uart_a02yyuw
|
tx_pin: GPIO4
|
||||||
tx_pin:
|
rx_pin: GPIO5
|
||||||
number: 4
|
|
||||||
rx_pin:
|
|
||||||
number: 5
|
|
||||||
baud_rate: 9600
|
|
||||||
|
|
||||||
sensor:
|
<<: !include common.yaml
|
||||||
- platform: a02yyuw
|
|
||||||
id: a02yyuw_sensor
|
|
||||||
name: a02yyuw Distance
|
|
||||||
uart_id: uart_a02yyuw
|
|
||||||
|
@ -1,13 +1,5 @@
|
|||||||
uart:
|
substitutions:
|
||||||
- id: uart_a02yyuw
|
tx_pin: GPIO4
|
||||||
tx_pin:
|
rx_pin: GPIO5
|
||||||
number: 4
|
|
||||||
rx_pin:
|
|
||||||
number: 5
|
|
||||||
baud_rate: 9600
|
|
||||||
|
|
||||||
sensor:
|
<<: !include common.yaml
|
||||||
- platform: a02yyuw
|
|
||||||
id: a02yyuw_sensor
|
|
||||||
name: a02yyuw Distance
|
|
||||||
uart_id: uart_a02yyuw
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user