mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Add supports_stop trait to Cover (#3897)
				
					
				
			* Add "stop" trait to Cover * Add `supports_stop` to Cover protobuf msg * Run `script/api_protobuf/api_protobuf.py` ... followed by `script/clang-format -i` * Add `has_stop` field to template Cover * Set `has_stop` during Cover codegen * Set `supports_stop` trait on all other Cover types * Bump APIVersion to 1.8 --------- Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
		
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							0a95f116fc
						
					
				
				
					commit
					bef5b38d49
				
			| @@ -40,6 +40,7 @@ void Am43Component::loop() { | |||||||
|  |  | ||||||
| CoverTraits Am43Component::get_traits() { | CoverTraits Am43Component::get_traits() { | ||||||
|   auto traits = CoverTraits(); |   auto traits = CoverTraits(); | ||||||
|  |   traits.set_supports_stop(true); | ||||||
|   traits.set_supports_position(true); |   traits.set_supports_position(true); | ||||||
|   traits.set_supports_tilt(false); |   traits.set_supports_tilt(false); | ||||||
|   traits.set_is_assumed_state(false); |   traits.set_is_assumed_state(false); | ||||||
|   | |||||||
| @@ -288,6 +288,7 @@ message ListEntitiesCoverResponse { | |||||||
|   bool disabled_by_default = 9; |   bool disabled_by_default = 9; | ||||||
|   string icon = 10; |   string icon = 10; | ||||||
|   EntityCategory entity_category = 11; |   EntityCategory entity_category = 11; | ||||||
|  |   bool supports_stop = 12; | ||||||
| } | } | ||||||
|  |  | ||||||
| enum LegacyCoverState { | enum LegacyCoverState { | ||||||
|   | |||||||
| @@ -944,7 +944,7 @@ HelloResponse APIConnection::hello(const HelloRequest &msg) { | |||||||
|  |  | ||||||
|   HelloResponse resp; |   HelloResponse resp; | ||||||
|   resp.api_version_major = 1; |   resp.api_version_major = 1; | ||||||
|   resp.api_version_minor = 7; |   resp.api_version_minor = 8; | ||||||
|   resp.server_info = App.get_name() + " (esphome v" ESPHOME_VERSION ")"; |   resp.server_info = App.get_name() + " (esphome v" ESPHOME_VERSION ")"; | ||||||
|   resp.name = App.get_name(); |   resp.name = App.get_name(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -941,6 +941,10 @@ bool ListEntitiesCoverResponse::decode_varint(uint32_t field_id, ProtoVarInt val | |||||||
|       this->entity_category = value.as_enum<enums::EntityCategory>(); |       this->entity_category = value.as_enum<enums::EntityCategory>(); | ||||||
|       return true; |       return true; | ||||||
|     } |     } | ||||||
|  |     case 12: { | ||||||
|  |       this->supports_stop = value.as_bool(); | ||||||
|  |       return true; | ||||||
|  |     } | ||||||
|     default: |     default: | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
| @@ -993,6 +997,7 @@ void ListEntitiesCoverResponse::encode(ProtoWriteBuffer buffer) const { | |||||||
|   buffer.encode_bool(9, this->disabled_by_default); |   buffer.encode_bool(9, this->disabled_by_default); | ||||||
|   buffer.encode_string(10, this->icon); |   buffer.encode_string(10, this->icon); | ||||||
|   buffer.encode_enum<enums::EntityCategory>(11, this->entity_category); |   buffer.encode_enum<enums::EntityCategory>(11, this->entity_category); | ||||||
|  |   buffer.encode_bool(12, this->supports_stop); | ||||||
| } | } | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
| void ListEntitiesCoverResponse::dump_to(std::string &out) const { | void ListEntitiesCoverResponse::dump_to(std::string &out) const { | ||||||
| @@ -1042,6 +1047,10 @@ void ListEntitiesCoverResponse::dump_to(std::string &out) const { | |||||||
|   out.append("  entity_category: "); |   out.append("  entity_category: "); | ||||||
|   out.append(proto_enum_to_string<enums::EntityCategory>(this->entity_category)); |   out.append(proto_enum_to_string<enums::EntityCategory>(this->entity_category)); | ||||||
|   out.append("\n"); |   out.append("\n"); | ||||||
|  |  | ||||||
|  |   out.append("  supports_stop: "); | ||||||
|  |   out.append(YESNO(this->supports_stop)); | ||||||
|  |   out.append("\n"); | ||||||
|   out.append("}"); |   out.append("}"); | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -375,6 +375,7 @@ class ListEntitiesCoverResponse : public ProtoMessage { | |||||||
|   bool disabled_by_default{false}; |   bool disabled_by_default{false}; | ||||||
|   std::string icon{}; |   std::string icon{}; | ||||||
|   enums::EntityCategory entity_category{}; |   enums::EntityCategory entity_category{}; | ||||||
|  |   bool supports_stop{false}; | ||||||
|   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; | ||||||
|   | |||||||
| @@ -28,6 +28,7 @@ cover::CoverTraits CopyCover::get_traits() { | |||||||
|   // copy traits manually so it doesn't break when new options are added |   // copy traits manually so it doesn't break when new options are added | ||||||
|   // but the control() method hasn't implemented them yet. |   // but the control() method hasn't implemented them yet. | ||||||
|   traits.set_is_assumed_state(base.get_is_assumed_state()); |   traits.set_is_assumed_state(base.get_is_assumed_state()); | ||||||
|  |   traits.set_supports_stop(base.get_supports_stop()); | ||||||
|   traits.set_supports_position(base.get_supports_position()); |   traits.set_supports_position(base.get_supports_position()); | ||||||
|   traits.set_supports_tilt(base.get_supports_tilt()); |   traits.set_supports_tilt(base.get_supports_tilt()); | ||||||
|   traits.set_supports_toggle(base.get_supports_toggle()); |   traits.set_supports_toggle(base.get_supports_toggle()); | ||||||
|   | |||||||
| @@ -15,12 +15,15 @@ class CoverTraits { | |||||||
|   void set_supports_tilt(bool supports_tilt) { this->supports_tilt_ = supports_tilt; } |   void set_supports_tilt(bool supports_tilt) { this->supports_tilt_ = supports_tilt; } | ||||||
|   bool get_supports_toggle() const { return this->supports_toggle_; } |   bool get_supports_toggle() const { return this->supports_toggle_; } | ||||||
|   void set_supports_toggle(bool supports_toggle) { this->supports_toggle_ = supports_toggle; } |   void set_supports_toggle(bool supports_toggle) { this->supports_toggle_ = supports_toggle; } | ||||||
|  |   bool get_supports_stop() const { return this->supports_stop_; } | ||||||
|  |   void set_supports_stop(bool supports_stop) { this->supports_stop_ = supports_stop; } | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   bool is_assumed_state_{false}; |   bool is_assumed_state_{false}; | ||||||
|   bool supports_position_{false}; |   bool supports_position_{false}; | ||||||
|   bool supports_tilt_{false}; |   bool supports_tilt_{false}; | ||||||
|   bool supports_toggle_{false}; |   bool supports_toggle_{false}; | ||||||
|  |   bool supports_stop_{false}; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| }  // namespace cover | }  // namespace cover | ||||||
|   | |||||||
| @@ -12,6 +12,7 @@ using namespace esphome::cover; | |||||||
|  |  | ||||||
| CoverTraits CurrentBasedCover::get_traits() { | CoverTraits CurrentBasedCover::get_traits() { | ||||||
|   auto traits = CoverTraits(); |   auto traits = CoverTraits(); | ||||||
|  |   traits.set_supports_stop(true); | ||||||
|   traits.set_supports_position(true); |   traits.set_supports_position(true); | ||||||
|   traits.set_supports_toggle(true); |   traits.set_supports_toggle(true); | ||||||
|   traits.set_is_assumed_state(false); |   traits.set_is_assumed_state(false); | ||||||
|   | |||||||
| @@ -72,6 +72,7 @@ class DemoCover : public cover::Cover, public Component { | |||||||
|         traits.set_supports_tilt(true); |         traits.set_supports_tilt(true); | ||||||
|         break; |         break; | ||||||
|       case DemoCoverType::TYPE_4: |       case DemoCoverType::TYPE_4: | ||||||
|  |         traits.set_supports_stop(true); | ||||||
|         traits.set_is_assumed_state(true); |         traits.set_is_assumed_state(true); | ||||||
|         traits.set_supports_tilt(true); |         traits.set_supports_tilt(true); | ||||||
|         break; |         break; | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ using namespace esphome::cover; | |||||||
|  |  | ||||||
| CoverTraits EndstopCover::get_traits() { | CoverTraits EndstopCover::get_traits() { | ||||||
|   auto traits = CoverTraits(); |   auto traits = CoverTraits(); | ||||||
|  |   traits.set_supports_stop(true); | ||||||
|   traits.set_supports_position(true); |   traits.set_supports_position(true); | ||||||
|   traits.set_supports_toggle(true); |   traits.set_supports_toggle(true); | ||||||
|   traits.set_is_assumed_state(false); |   traits.set_is_assumed_state(false); | ||||||
|   | |||||||
| @@ -41,6 +41,7 @@ void FeedbackCover::setup() { | |||||||
|  |  | ||||||
| CoverTraits FeedbackCover::get_traits() { | CoverTraits FeedbackCover::get_traits() { | ||||||
|   auto traits = CoverTraits(); |   auto traits = CoverTraits(); | ||||||
|  |   traits.set_supports_stop(true); | ||||||
|   traits.set_supports_position(true); |   traits.set_supports_position(true); | ||||||
|   traits.set_supports_toggle(true); |   traits.set_supports_toggle(true); | ||||||
|   traits.set_is_assumed_state(this->assumed_state_); |   traits.set_is_assumed_state(this->assumed_state_); | ||||||
|   | |||||||
| @@ -73,6 +73,7 @@ async def to_code(config): | |||||||
|         await automation.build_automation( |         await automation.build_automation( | ||||||
|             var.get_stop_trigger(), [], config[CONF_STOP_ACTION] |             var.get_stop_trigger(), [], config[CONF_STOP_ACTION] | ||||||
|         ) |         ) | ||||||
|  |         cg.add(var.set_has_stop(True)) | ||||||
|     if CONF_TILT_ACTION in config: |     if CONF_TILT_ACTION in config: | ||||||
|         await automation.build_automation( |         await automation.build_automation( | ||||||
|             var.get_tilt_trigger(), [(float, "tilt")], config[CONF_TILT_ACTION] |             var.get_tilt_trigger(), [(float, "tilt")], config[CONF_TILT_ACTION] | ||||||
|   | |||||||
| @@ -109,6 +109,7 @@ void TemplateCover::control(const CoverCall &call) { | |||||||
| CoverTraits TemplateCover::get_traits() { | CoverTraits TemplateCover::get_traits() { | ||||||
|   auto traits = CoverTraits(); |   auto traits = CoverTraits(); | ||||||
|   traits.set_is_assumed_state(this->assumed_state_); |   traits.set_is_assumed_state(this->assumed_state_); | ||||||
|  |   traits.set_supports_stop(this->has_stop_); | ||||||
|   traits.set_supports_position(this->has_position_); |   traits.set_supports_position(this->has_position_); | ||||||
|   traits.set_supports_tilt(this->has_tilt_); |   traits.set_supports_tilt(this->has_tilt_); | ||||||
|   return traits; |   return traits; | ||||||
| @@ -116,6 +117,7 @@ CoverTraits TemplateCover::get_traits() { | |||||||
| Trigger<float> *TemplateCover::get_position_trigger() const { return this->position_trigger_; } | Trigger<float> *TemplateCover::get_position_trigger() const { return this->position_trigger_; } | ||||||
| Trigger<float> *TemplateCover::get_tilt_trigger() const { return this->tilt_trigger_; } | Trigger<float> *TemplateCover::get_tilt_trigger() const { return this->tilt_trigger_; } | ||||||
| void TemplateCover::set_tilt_lambda(std::function<optional<float>()> &&tilt_f) { this->tilt_f_ = tilt_f; } | void TemplateCover::set_tilt_lambda(std::function<optional<float>()> &&tilt_f) { this->tilt_f_ = tilt_f; } | ||||||
|  | void TemplateCover::set_has_stop(bool has_stop) { this->has_stop_ = has_stop; } | ||||||
| void TemplateCover::set_has_position(bool has_position) { this->has_position_ = has_position; } | void TemplateCover::set_has_position(bool has_position) { this->has_position_ = has_position; } | ||||||
| void TemplateCover::set_has_tilt(bool has_tilt) { this->has_tilt_ = has_tilt; } | void TemplateCover::set_has_tilt(bool has_tilt) { this->has_tilt_ = has_tilt; } | ||||||
| void TemplateCover::stop_prev_trigger_() { | void TemplateCover::stop_prev_trigger_() { | ||||||
|   | |||||||
| @@ -26,6 +26,7 @@ class TemplateCover : public cover::Cover, public Component { | |||||||
|   void set_optimistic(bool optimistic); |   void set_optimistic(bool optimistic); | ||||||
|   void set_assumed_state(bool assumed_state); |   void set_assumed_state(bool assumed_state); | ||||||
|   void set_tilt_lambda(std::function<optional<float>()> &&tilt_f); |   void set_tilt_lambda(std::function<optional<float>()> &&tilt_f); | ||||||
|  |   void set_has_stop(bool has_stop); | ||||||
|   void set_has_position(bool has_position); |   void set_has_position(bool has_position); | ||||||
|   void set_has_tilt(bool has_tilt); |   void set_has_tilt(bool has_tilt); | ||||||
|   void set_restore_mode(TemplateCoverRestoreMode restore_mode) { restore_mode_ = restore_mode; } |   void set_restore_mode(TemplateCoverRestoreMode restore_mode) { restore_mode_ = restore_mode; } | ||||||
| @@ -48,6 +49,7 @@ class TemplateCover : public cover::Cover, public Component { | |||||||
|   bool optimistic_{false}; |   bool optimistic_{false}; | ||||||
|   Trigger<> *open_trigger_; |   Trigger<> *open_trigger_; | ||||||
|   Trigger<> *close_trigger_; |   Trigger<> *close_trigger_; | ||||||
|  |   bool has_stop_{false}; | ||||||
|   Trigger<> *stop_trigger_; |   Trigger<> *stop_trigger_; | ||||||
|   Trigger<> *prev_command_trigger_{nullptr}; |   Trigger<> *prev_command_trigger_{nullptr}; | ||||||
|   Trigger<float> *position_trigger_; |   Trigger<float> *position_trigger_; | ||||||
|   | |||||||
| @@ -51,6 +51,7 @@ void TimeBasedCover::loop() { | |||||||
| float TimeBasedCover::get_setup_priority() const { return setup_priority::DATA; } | float TimeBasedCover::get_setup_priority() const { return setup_priority::DATA; } | ||||||
| CoverTraits TimeBasedCover::get_traits() { | CoverTraits TimeBasedCover::get_traits() { | ||||||
|   auto traits = CoverTraits(); |   auto traits = CoverTraits(); | ||||||
|  |   traits.set_supports_stop(true); | ||||||
|   traits.set_supports_position(true); |   traits.set_supports_position(true); | ||||||
|   traits.set_supports_toggle(true); |   traits.set_supports_toggle(true); | ||||||
|   traits.set_is_assumed_state(this->assumed_state_); |   traits.set_is_assumed_state(this->assumed_state_); | ||||||
|   | |||||||
| @@ -128,6 +128,7 @@ void TuyaCover::dump_config() { | |||||||
|  |  | ||||||
| cover::CoverTraits TuyaCover::get_traits() { | cover::CoverTraits TuyaCover::get_traits() { | ||||||
|   auto traits = cover::CoverTraits(); |   auto traits = cover::CoverTraits(); | ||||||
|  |   traits.set_supports_stop(true); | ||||||
|   traits.set_supports_position(true); |   traits.set_supports_position(true); | ||||||
|   return traits; |   return traits; | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user