mirror of
https://github.com/esphome/esphome.git
synced 2024-11-21 22:48:10 +01:00
Add area (zone) to esphome core config to be suggested through API and MQTT. (#5602)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
parent
cfbf3681f3
commit
bcfbcd9578
10 changed files with 31 additions and 3 deletions
|
@ -217,6 +217,8 @@ message DeviceInfoResponse {
|
||||||
string friendly_name = 13;
|
string friendly_name = 13;
|
||||||
|
|
||||||
uint32 voice_assistant_version = 14;
|
uint32 voice_assistant_version = 14;
|
||||||
|
|
||||||
|
string suggested_area = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ListEntitiesRequest {
|
message ListEntitiesRequest {
|
||||||
|
|
|
@ -1084,6 +1084,7 @@ DeviceInfoResponse APIConnection::device_info(const DeviceInfoRequest &msg) {
|
||||||
resp.uses_password = this->parent_->uses_password();
|
resp.uses_password = this->parent_->uses_password();
|
||||||
resp.name = App.get_name();
|
resp.name = App.get_name();
|
||||||
resp.friendly_name = App.get_friendly_name();
|
resp.friendly_name = App.get_friendly_name();
|
||||||
|
resp.suggested_area = App.get_area();
|
||||||
resp.mac_address = get_mac_address_pretty();
|
resp.mac_address = get_mac_address_pretty();
|
||||||
resp.esphome_version = ESPHOME_VERSION;
|
resp.esphome_version = ESPHOME_VERSION;
|
||||||
resp.compilation_time = App.get_compilation_time();
|
resp.compilation_time = App.get_compilation_time();
|
||||||
|
|
|
@ -761,6 +761,10 @@ bool DeviceInfoResponse::decode_length(uint32_t field_id, ProtoLengthDelimited v
|
||||||
this->friendly_name = value.as_string();
|
this->friendly_name = value.as_string();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
case 16: {
|
||||||
|
this->suggested_area = value.as_string();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -781,6 +785,7 @@ void DeviceInfoResponse::encode(ProtoWriteBuffer buffer) const {
|
||||||
buffer.encode_string(12, this->manufacturer);
|
buffer.encode_string(12, this->manufacturer);
|
||||||
buffer.encode_string(13, this->friendly_name);
|
buffer.encode_string(13, this->friendly_name);
|
||||||
buffer.encode_uint32(14, this->voice_assistant_version);
|
buffer.encode_uint32(14, this->voice_assistant_version);
|
||||||
|
buffer.encode_string(16, this->suggested_area);
|
||||||
}
|
}
|
||||||
#ifdef HAS_PROTO_MESSAGE_DUMP
|
#ifdef HAS_PROTO_MESSAGE_DUMP
|
||||||
void DeviceInfoResponse::dump_to(std::string &out) const {
|
void DeviceInfoResponse::dump_to(std::string &out) const {
|
||||||
|
@ -849,6 +854,10 @@ void DeviceInfoResponse::dump_to(std::string &out) const {
|
||||||
sprintf(buffer, "%" PRIu32, this->voice_assistant_version);
|
sprintf(buffer, "%" PRIu32, this->voice_assistant_version);
|
||||||
out.append(buffer);
|
out.append(buffer);
|
||||||
out.append("\n");
|
out.append("\n");
|
||||||
|
|
||||||
|
out.append(" suggested_area: ");
|
||||||
|
out.append("'").append(this->suggested_area).append("'");
|
||||||
|
out.append("\n");
|
||||||
out.append("}");
|
out.append("}");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -328,6 +328,7 @@ class DeviceInfoResponse : public ProtoMessage {
|
||||||
std::string manufacturer{};
|
std::string manufacturer{};
|
||||||
std::string friendly_name{};
|
std::string friendly_name{};
|
||||||
uint32_t voice_assistant_version{0};
|
uint32_t voice_assistant_version{0};
|
||||||
|
std::string suggested_area{};
|
||||||
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;
|
||||||
|
|
|
@ -136,6 +136,7 @@ bool MQTTComponent::send_discovery_() {
|
||||||
if (node_friendly_name.empty()) {
|
if (node_friendly_name.empty()) {
|
||||||
node_friendly_name = node_name;
|
node_friendly_name = node_name;
|
||||||
}
|
}
|
||||||
|
const std::string &node_area = App.get_area();
|
||||||
|
|
||||||
JsonObject device_info = root.createNestedObject(MQTT_DEVICE);
|
JsonObject device_info = root.createNestedObject(MQTT_DEVICE);
|
||||||
device_info[MQTT_DEVICE_IDENTIFIERS] = get_mac_address();
|
device_info[MQTT_DEVICE_IDENTIFIERS] = get_mac_address();
|
||||||
|
@ -143,6 +144,7 @@ bool MQTTComponent::send_discovery_() {
|
||||||
device_info[MQTT_DEVICE_SW_VERSION] = "esphome v" ESPHOME_VERSION " " + App.get_compilation_time();
|
device_info[MQTT_DEVICE_SW_VERSION] = "esphome v" ESPHOME_VERSION " " + App.get_compilation_time();
|
||||||
device_info[MQTT_DEVICE_MODEL] = ESPHOME_BOARD;
|
device_info[MQTT_DEVICE_MODEL] = ESPHOME_BOARD;
|
||||||
device_info[MQTT_DEVICE_MANUFACTURER] = "espressif";
|
device_info[MQTT_DEVICE_MANUFACTURER] = "espressif";
|
||||||
|
device_info[MQTT_DEVICE_SUGGESTED_AREA] = node_area;
|
||||||
},
|
},
|
||||||
0, discovery_info.retain);
|
0, discovery_info.retain);
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,7 @@ CONF_AND = "and"
|
||||||
CONF_AP = "ap"
|
CONF_AP = "ap"
|
||||||
CONF_APPARENT_POWER = "apparent_power"
|
CONF_APPARENT_POWER = "apparent_power"
|
||||||
CONF_ARDUINO_VERSION = "arduino_version"
|
CONF_ARDUINO_VERSION = "arduino_version"
|
||||||
|
CONF_AREA = "area"
|
||||||
CONF_ARGS = "args"
|
CONF_ARGS = "args"
|
||||||
CONF_ASSUMED_STATE = "assumed_state"
|
CONF_ASSUMED_STATE = "assumed_state"
|
||||||
CONF_AT = "at"
|
CONF_AT = "at"
|
||||||
|
|
|
@ -464,6 +464,8 @@ class EsphomeCore:
|
||||||
self.name: Optional[str] = None
|
self.name: Optional[str] = None
|
||||||
# The friendly name of the node
|
# The friendly name of the node
|
||||||
self.friendly_name: Optional[str] = None
|
self.friendly_name: Optional[str] = None
|
||||||
|
# The area / zone of the node
|
||||||
|
self.area: Optional[str] = None
|
||||||
# Additional data components can store temporary data in
|
# Additional data components can store temporary data in
|
||||||
# The first key to this dict should always be the integration name
|
# The first key to this dict should always be the integration name
|
||||||
self.data = {}
|
self.data = {}
|
||||||
|
@ -504,6 +506,7 @@ class EsphomeCore:
|
||||||
self.dashboard = False
|
self.dashboard = False
|
||||||
self.name = None
|
self.name = None
|
||||||
self.friendly_name = None
|
self.friendly_name = None
|
||||||
|
self.area = None
|
||||||
self.data = {}
|
self.data = {}
|
||||||
self.config_path = None
|
self.config_path = None
|
||||||
self.build_path = None
|
self.build_path = None
|
||||||
|
|
|
@ -59,8 +59,8 @@ namespace esphome {
|
||||||
|
|
||||||
class Application {
|
class Application {
|
||||||
public:
|
public:
|
||||||
void pre_setup(const std::string &name, const std::string &friendly_name, const char *comment,
|
void pre_setup(const std::string &name, const std::string &friendly_name, const std::string &area,
|
||||||
const char *compilation_time, bool name_add_mac_suffix) {
|
const char *comment, const char *compilation_time, bool name_add_mac_suffix) {
|
||||||
arch_init();
|
arch_init();
|
||||||
this->name_add_mac_suffix_ = name_add_mac_suffix;
|
this->name_add_mac_suffix_ = name_add_mac_suffix;
|
||||||
if (name_add_mac_suffix) {
|
if (name_add_mac_suffix) {
|
||||||
|
@ -74,6 +74,7 @@ class Application {
|
||||||
this->name_ = name;
|
this->name_ = name;
|
||||||
this->friendly_name_ = friendly_name;
|
this->friendly_name_ = friendly_name;
|
||||||
}
|
}
|
||||||
|
this->area_ = area;
|
||||||
this->comment_ = comment;
|
this->comment_ = comment;
|
||||||
this->compilation_time_ = compilation_time;
|
this->compilation_time_ = compilation_time;
|
||||||
}
|
}
|
||||||
|
@ -160,6 +161,10 @@ class Application {
|
||||||
|
|
||||||
/// Get the friendly name of this Application set by pre_setup().
|
/// Get the friendly name of this Application set by pre_setup().
|
||||||
const std::string &get_friendly_name() const { return this->friendly_name_; }
|
const std::string &get_friendly_name() const { return this->friendly_name_; }
|
||||||
|
|
||||||
|
/// Get the area of this Application set by pre_setup().
|
||||||
|
const std::string &get_area() const { return this->area_; }
|
||||||
|
|
||||||
/// Get the comment of this Application set by pre_setup().
|
/// Get the comment of this Application set by pre_setup().
|
||||||
std::string get_comment() const { return this->comment_; }
|
std::string get_comment() const { return this->comment_; }
|
||||||
|
|
||||||
|
@ -395,6 +400,7 @@ class Application {
|
||||||
|
|
||||||
std::string name_;
|
std::string name_;
|
||||||
std::string friendly_name_;
|
std::string friendly_name_;
|
||||||
|
std::string area_;
|
||||||
const char *comment_{nullptr};
|
const char *comment_{nullptr};
|
||||||
const char *compilation_time_{nullptr};
|
const char *compilation_time_{nullptr};
|
||||||
bool name_add_mac_suffix_;
|
bool name_add_mac_suffix_;
|
||||||
|
|
|
@ -8,6 +8,7 @@ import esphome.config_validation as cv
|
||||||
from esphome import automation
|
from esphome import automation
|
||||||
from esphome.const import (
|
from esphome.const import (
|
||||||
CONF_ARDUINO_VERSION,
|
CONF_ARDUINO_VERSION,
|
||||||
|
CONF_AREA,
|
||||||
CONF_BOARD,
|
CONF_BOARD,
|
||||||
CONF_BOARD_FLASH_MODE,
|
CONF_BOARD_FLASH_MODE,
|
||||||
CONF_BUILD_PATH,
|
CONF_BUILD_PATH,
|
||||||
|
@ -126,6 +127,7 @@ CONFIG_SCHEMA = cv.All(
|
||||||
{
|
{
|
||||||
cv.Required(CONF_NAME): cv.valid_name,
|
cv.Required(CONF_NAME): cv.valid_name,
|
||||||
cv.Optional(CONF_FRIENDLY_NAME, ""): cv.string,
|
cv.Optional(CONF_FRIENDLY_NAME, ""): cv.string,
|
||||||
|
cv.Optional(CONF_AREA, ""): cv.string,
|
||||||
cv.Optional(CONF_COMMENT): cv.string,
|
cv.Optional(CONF_COMMENT): cv.string,
|
||||||
cv.Required(CONF_BUILD_PATH): cv.string,
|
cv.Required(CONF_BUILD_PATH): cv.string,
|
||||||
cv.Optional(CONF_PLATFORMIO_OPTIONS, default={}): cv.Schema(
|
cv.Optional(CONF_PLATFORMIO_OPTIONS, default={}): cv.Schema(
|
||||||
|
@ -350,6 +352,7 @@ async def to_code(config):
|
||||||
cg.App.pre_setup(
|
cg.App.pre_setup(
|
||||||
config[CONF_NAME],
|
config[CONF_NAME],
|
||||||
config[CONF_FRIENDLY_NAME],
|
config[CONF_FRIENDLY_NAME],
|
||||||
|
config[CONF_AREA],
|
||||||
config.get(CONF_COMMENT, ""),
|
config.get(CONF_COMMENT, ""),
|
||||||
cg.RawExpression('__DATE__ ", " __TIME__'),
|
cg.RawExpression('__DATE__ ", " __TIME__'),
|
||||||
config[CONF_NAME_ADD_MAC_SUFFIX],
|
config[CONF_NAME_ADD_MAC_SUFFIX],
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
using namespace esphome;
|
using namespace esphome;
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
App.pre_setup("livingroom", "LivingRoom", "comment", __DATE__ ", " __TIME__, false);
|
App.pre_setup("livingroom", "LivingRoom", "LivingRoomArea", "comment", __DATE__ ", " __TIME__, false);
|
||||||
auto *log = new logger::Logger(115200, 512); // NOLINT
|
auto *log = new logger::Logger(115200, 512); // NOLINT
|
||||||
log->pre_setup();
|
log->pre_setup();
|
||||||
log->set_uart_selection(logger::UART_SELECTION_UART0);
|
log->set_uart_selection(logger::UART_SELECTION_UART0);
|
||||||
|
|
Loading…
Reference in a new issue