Add EntityBase properties to ESP32 Camera (#2600)

This commit is contained in:
Paul Monigatti 2021-10-22 23:10:29 +13:00 committed by GitHub
parent f7b3f52731
commit be3cb9ef00
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 18 additions and 7 deletions

View file

@ -701,6 +701,7 @@ message ListEntitiesCameraResponse {
string name = 3; string name = 3;
string unique_id = 4; string unique_id = 4;
bool disabled_by_default = 5; bool disabled_by_default = 5;
string icon = 6;
} }
message CameraImageResponse { message CameraImageResponse {

View file

@ -680,6 +680,7 @@ bool APIConnection::send_camera_info(esp32_camera::ESP32Camera *camera) {
msg.name = camera->get_name(); msg.name = camera->get_name();
msg.unique_id = get_default_unique_id("camera", camera); msg.unique_id = get_default_unique_id("camera", camera);
msg.disabled_by_default = camera->is_disabled_by_default(); msg.disabled_by_default = camera->is_disabled_by_default();
msg.icon = camera->get_icon();
return this->send_list_entities_camera_response(msg); return this->send_list_entities_camera_response(msg);
} }
void APIConnection::camera_image(const CameraImageRequest &msg) { void APIConnection::camera_image(const CameraImageRequest &msg) {

View file

@ -2910,6 +2910,10 @@ bool ListEntitiesCameraResponse::decode_length(uint32_t field_id, ProtoLengthDel
this->unique_id = value.as_string(); this->unique_id = value.as_string();
return true; return true;
} }
case 6: {
this->icon = value.as_string();
return true;
}
default: default:
return false; return false;
} }
@ -2930,6 +2934,7 @@ void ListEntitiesCameraResponse::encode(ProtoWriteBuffer buffer) const {
buffer.encode_string(3, this->name); buffer.encode_string(3, this->name);
buffer.encode_string(4, this->unique_id); buffer.encode_string(4, this->unique_id);
buffer.encode_bool(5, this->disabled_by_default); buffer.encode_bool(5, this->disabled_by_default);
buffer.encode_string(6, this->icon);
} }
#ifdef HAS_PROTO_MESSAGE_DUMP #ifdef HAS_PROTO_MESSAGE_DUMP
void ListEntitiesCameraResponse::dump_to(std::string &out) const { void ListEntitiesCameraResponse::dump_to(std::string &out) const {
@ -2955,6 +2960,10 @@ void ListEntitiesCameraResponse::dump_to(std::string &out) const {
out.append(" disabled_by_default: "); out.append(" disabled_by_default: ");
out.append(YESNO(this->disabled_by_default)); out.append(YESNO(this->disabled_by_default));
out.append("\n"); out.append("\n");
out.append(" icon: ");
out.append("'").append(this->icon).append("'");
out.append("\n");
out.append("}"); out.append("}");
} }
#endif #endif

View file

@ -803,6 +803,7 @@ class ListEntitiesCameraResponse : public ProtoMessage {
std::string name{}; std::string name{};
std::string unique_id{}; std::string unique_id{};
bool disabled_by_default{false}; bool disabled_by_default{false};
std::string icon{};
void encode(ProtoWriteBuffer buffer) const override; void encode(ProtoWriteBuffer buffer) const override;
#ifdef HAS_PROTO_MESSAGE_DUMP #ifdef HAS_PROTO_MESSAGE_DUMP
void dump_to(std::string &out) const override; void dump_to(std::string &out) const override;

View file

@ -2,10 +2,8 @@ import esphome.codegen as cg
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome import pins from esphome import pins
from esphome.const import ( from esphome.const import (
CONF_DISABLED_BY_DEFAULT,
CONF_FREQUENCY, CONF_FREQUENCY,
CONF_ID, CONF_ID,
CONF_NAME,
CONF_PIN, CONF_PIN,
CONF_SCL, CONF_SCL,
CONF_SDA, CONF_SDA,
@ -17,6 +15,7 @@ from esphome.const import (
) )
from esphome.core import CORE from esphome.core import CORE
from esphome.components.esp32 import add_idf_sdkconfig_option from esphome.components.esp32 import add_idf_sdkconfig_option
from esphome.cpp_helpers import setup_entity
DEPENDENCIES = ["esp32", "api"] DEPENDENCIES = ["esp32", "api"]
@ -63,11 +62,9 @@ CONF_TEST_PATTERN = "test_pattern"
camera_range_param = cv.int_range(min=-2, max=2) camera_range_param = cv.int_range(min=-2, max=2)
CONFIG_SCHEMA = cv.Schema( CONFIG_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(
{ {
cv.GenerateID(): cv.declare_id(ESP32Camera), cv.GenerateID(): cv.declare_id(ESP32Camera),
cv.Required(CONF_NAME): cv.string,
cv.Optional(CONF_DISABLED_BY_DEFAULT, default=False): cv.boolean,
cv.Required(CONF_DATA_PINS): cv.All( cv.Required(CONF_DATA_PINS): cv.All(
[pins.internal_gpio_input_pin_number], cv.Length(min=8, max=8) [pins.internal_gpio_input_pin_number], cv.Length(min=8, max=8)
), ),
@ -127,8 +124,8 @@ SETTERS = {
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID], config[CONF_NAME]) var = cg.new_Pvariable(config[CONF_ID])
cg.add(var.set_disabled_by_default(config[CONF_DISABLED_BY_DEFAULT])) await setup_entity(var, config)
await cg.register_component(var, config) await cg.register_component(var, config)
for key, setter in SETTERS.items(): for key, setter in SETTERS.items():

View file

@ -185,6 +185,7 @@ ESP32Camera::ESP32Camera(const std::string &name) : EntityBase(name) {
global_esp32_camera = this; global_esp32_camera = this;
} }
ESP32Camera::ESP32Camera() : ESP32Camera("") {}
void ESP32Camera::set_data_pins(std::array<uint8_t, 8> pins) { void ESP32Camera::set_data_pins(std::array<uint8_t, 8> pins) {
this->config_.pin_d0 = pins[0]; this->config_.pin_d0 = pins[0];
this->config_.pin_d1 = pins[1]; this->config_.pin_d1 = pins[1];

View file

@ -54,6 +54,7 @@ enum ESP32CameraFrameSize {
class ESP32Camera : public Component, public EntityBase { class ESP32Camera : public Component, public EntityBase {
public: public:
ESP32Camera(const std::string &name); ESP32Camera(const std::string &name);
ESP32Camera();
void set_data_pins(std::array<uint8_t, 8> pins); void set_data_pins(std::array<uint8_t, 8> pins);
void set_vsync_pin(uint8_t pin); void set_vsync_pin(uint8_t pin);
void set_href_pin(uint8_t pin); void set_href_pin(uint8_t pin);