mirror of
https://github.com/esphome/esphome.git
synced 2024-11-10 01:07:45 +01:00
Add support for doing update entity refresh/check via API. (#7190)
This commit is contained in:
parent
38c25dec93
commit
87944f0c1b
6 changed files with 43 additions and 8 deletions
|
@ -1872,6 +1872,11 @@ message UpdateStateResponse {
|
|||
string release_summary = 9;
|
||||
string release_url = 10;
|
||||
}
|
||||
enum UpdateCommand {
|
||||
UPDATE_COMMAND_NONE = 0;
|
||||
UPDATE_COMMAND_UPDATE = 1;
|
||||
UPDATE_COMMAND_CHECK = 2;
|
||||
}
|
||||
message UpdateCommandRequest {
|
||||
option (id) = 118;
|
||||
option (source) = SOURCE_CLIENT;
|
||||
|
@ -1879,5 +1884,5 @@ message UpdateCommandRequest {
|
|||
option (no_delay) = true;
|
||||
|
||||
fixed32 key = 1;
|
||||
bool install = 2;
|
||||
UpdateCommand command = 2;
|
||||
}
|
||||
|
|
|
@ -1328,7 +1328,17 @@ void APIConnection::update_command(const UpdateCommandRequest &msg) {
|
|||
if (update == nullptr)
|
||||
return;
|
||||
|
||||
update->perform();
|
||||
switch (msg.command) {
|
||||
case enums::UPDATE_COMMAND_UPDATE:
|
||||
update->perform();
|
||||
break;
|
||||
case enums::UPDATE_COMMAND_CHECK:
|
||||
update->check();
|
||||
break;
|
||||
default:
|
||||
ESP_LOGW(TAG, "Unknown update command: %d", msg.command);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -567,6 +567,20 @@ template<> const char *proto_enum_to_string<enums::ValveOperation>(enums::ValveO
|
|||
}
|
||||
}
|
||||
#endif
|
||||
#ifdef HAS_PROTO_MESSAGE_DUMP
|
||||
template<> const char *proto_enum_to_string<enums::UpdateCommand>(enums::UpdateCommand value) {
|
||||
switch (value) {
|
||||
case enums::UPDATE_COMMAND_NONE:
|
||||
return "UPDATE_COMMAND_NONE";
|
||||
case enums::UPDATE_COMMAND_UPDATE:
|
||||
return "UPDATE_COMMAND_UPDATE";
|
||||
case enums::UPDATE_COMMAND_CHECK:
|
||||
return "UPDATE_COMMAND_CHECK";
|
||||
default:
|
||||
return "UNKNOWN";
|
||||
}
|
||||
}
|
||||
#endif
|
||||
bool HelloRequest::decode_varint(uint32_t field_id, ProtoVarInt value) {
|
||||
switch (field_id) {
|
||||
case 2: {
|
||||
|
@ -8596,7 +8610,7 @@ void UpdateStateResponse::dump_to(std::string &out) const {
|
|||
bool UpdateCommandRequest::decode_varint(uint32_t field_id, ProtoVarInt value) {
|
||||
switch (field_id) {
|
||||
case 2: {
|
||||
this->install = value.as_bool();
|
||||
this->command = value.as_enum<enums::UpdateCommand>();
|
||||
return true;
|
||||
}
|
||||
default:
|
||||
|
@ -8615,7 +8629,7 @@ bool UpdateCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) {
|
|||
}
|
||||
void UpdateCommandRequest::encode(ProtoWriteBuffer buffer) const {
|
||||
buffer.encode_fixed32(1, this->key);
|
||||
buffer.encode_bool(2, this->install);
|
||||
buffer.encode_enum<enums::UpdateCommand>(2, this->command);
|
||||
}
|
||||
#ifdef HAS_PROTO_MESSAGE_DUMP
|
||||
void UpdateCommandRequest::dump_to(std::string &out) const {
|
||||
|
@ -8626,8 +8640,8 @@ void UpdateCommandRequest::dump_to(std::string &out) const {
|
|||
out.append(buffer);
|
||||
out.append("\n");
|
||||
|
||||
out.append(" install: ");
|
||||
out.append(YESNO(this->install));
|
||||
out.append(" command: ");
|
||||
out.append(proto_enum_to_string<enums::UpdateCommand>(this->command));
|
||||
out.append("\n");
|
||||
out.append("}");
|
||||
}
|
||||
|
|
|
@ -227,6 +227,11 @@ enum ValveOperation : uint32_t {
|
|||
VALVE_OPERATION_IS_OPENING = 1,
|
||||
VALVE_OPERATION_IS_CLOSING = 2,
|
||||
};
|
||||
enum UpdateCommand : uint32_t {
|
||||
UPDATE_COMMAND_NONE = 0,
|
||||
UPDATE_COMMAND_UPDATE = 1,
|
||||
UPDATE_COMMAND_CHECK = 2,
|
||||
};
|
||||
|
||||
} // namespace enums
|
||||
|
||||
|
@ -2175,7 +2180,7 @@ class UpdateStateResponse : public ProtoMessage {
|
|||
class UpdateCommandRequest : public ProtoMessage {
|
||||
public:
|
||||
uint32_t key{0};
|
||||
bool install{false};
|
||||
enums::UpdateCommand command{};
|
||||
void encode(ProtoWriteBuffer buffer) const override;
|
||||
#ifdef HAS_PROTO_MESSAGE_DUMP
|
||||
void dump_to(std::string &out) const override;
|
||||
|
|
|
@ -16,6 +16,7 @@ class HttpRequestUpdate : public update::UpdateEntity, public PollingComponent {
|
|||
void update() override;
|
||||
|
||||
void perform(bool force) override;
|
||||
void check() override { this->update(); }
|
||||
|
||||
void set_source_url(const std::string &source_url) { this->source_url_ = source_url; }
|
||||
|
||||
|
|
|
@ -33,8 +33,8 @@ class UpdateEntity : public EntityBase, public EntityBase_DeviceClass {
|
|||
void publish_state();
|
||||
|
||||
void perform() { this->perform(false); }
|
||||
|
||||
virtual void perform(bool force) = 0;
|
||||
virtual void check() = 0;
|
||||
|
||||
const UpdateInfo &update_info = update_info_;
|
||||
const UpdateState &state = state_;
|
||||
|
|
Loading…
Reference in a new issue