mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Remove single-use send_*_info wrappers in API connection (#9255)
This commit is contained in:
		| @@ -304,10 +304,6 @@ bool APIConnection::send_binary_sensor_state(binary_sensor::BinarySensor *binary | |||||||
|   return this->schedule_message_(binary_sensor, &APIConnection::try_send_binary_sensor_state, |   return this->schedule_message_(binary_sensor, &APIConnection::try_send_binary_sensor_state, | ||||||
|                                  BinarySensorStateResponse::MESSAGE_TYPE); |                                  BinarySensorStateResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
| void APIConnection::send_binary_sensor_info(binary_sensor::BinarySensor *binary_sensor) { |  | ||||||
|   this->schedule_message_(binary_sensor, &APIConnection::try_send_binary_sensor_info, |  | ||||||
|                           ListEntitiesBinarySensorResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| uint16_t APIConnection::try_send_binary_sensor_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_binary_sensor_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                                      bool is_single) { |                                                      bool is_single) { | ||||||
| @@ -335,9 +331,6 @@ uint16_t APIConnection::try_send_binary_sensor_info(EntityBase *entity, APIConne | |||||||
| bool APIConnection::send_cover_state(cover::Cover *cover) { | bool APIConnection::send_cover_state(cover::Cover *cover) { | ||||||
|   return this->schedule_message_(cover, &APIConnection::try_send_cover_state, CoverStateResponse::MESSAGE_TYPE); |   return this->schedule_message_(cover, &APIConnection::try_send_cover_state, CoverStateResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
| void APIConnection::send_cover_info(cover::Cover *cover) { |  | ||||||
|   this->schedule_message_(cover, &APIConnection::try_send_cover_info, ListEntitiesCoverResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_cover_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_cover_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                              bool is_single) { |                                              bool is_single) { | ||||||
|   auto *cover = static_cast<cover::Cover *>(entity); |   auto *cover = static_cast<cover::Cover *>(entity); | ||||||
| @@ -399,9 +392,6 @@ void APIConnection::cover_command(const CoverCommandRequest &msg) { | |||||||
| bool APIConnection::send_fan_state(fan::Fan *fan) { | bool APIConnection::send_fan_state(fan::Fan *fan) { | ||||||
|   return this->schedule_message_(fan, &APIConnection::try_send_fan_state, FanStateResponse::MESSAGE_TYPE); |   return this->schedule_message_(fan, &APIConnection::try_send_fan_state, FanStateResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
| void APIConnection::send_fan_info(fan::Fan *fan) { |  | ||||||
|   this->schedule_message_(fan, &APIConnection::try_send_fan_info, ListEntitiesFanResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_fan_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_fan_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                            bool is_single) { |                                            bool is_single) { | ||||||
|   auto *fan = static_cast<fan::Fan *>(entity); |   auto *fan = static_cast<fan::Fan *>(entity); | ||||||
| @@ -461,9 +451,6 @@ void APIConnection::fan_command(const FanCommandRequest &msg) { | |||||||
| bool APIConnection::send_light_state(light::LightState *light) { | bool APIConnection::send_light_state(light::LightState *light) { | ||||||
|   return this->schedule_message_(light, &APIConnection::try_send_light_state, LightStateResponse::MESSAGE_TYPE); |   return this->schedule_message_(light, &APIConnection::try_send_light_state, LightStateResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
| void APIConnection::send_light_info(light::LightState *light) { |  | ||||||
|   this->schedule_message_(light, &APIConnection::try_send_light_info, ListEntitiesLightResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_light_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_light_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                              bool is_single) { |                                              bool is_single) { | ||||||
|   auto *light = static_cast<light::LightState *>(entity); |   auto *light = static_cast<light::LightState *>(entity); | ||||||
| @@ -556,9 +543,6 @@ void APIConnection::light_command(const LightCommandRequest &msg) { | |||||||
| bool APIConnection::send_sensor_state(sensor::Sensor *sensor) { | bool APIConnection::send_sensor_state(sensor::Sensor *sensor) { | ||||||
|   return this->schedule_message_(sensor, &APIConnection::try_send_sensor_state, SensorStateResponse::MESSAGE_TYPE); |   return this->schedule_message_(sensor, &APIConnection::try_send_sensor_state, SensorStateResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
| void APIConnection::send_sensor_info(sensor::Sensor *sensor) { |  | ||||||
|   this->schedule_message_(sensor, &APIConnection::try_send_sensor_info, ListEntitiesSensorResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| uint16_t APIConnection::try_send_sensor_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_sensor_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                               bool is_single) { |                                               bool is_single) { | ||||||
| @@ -591,9 +575,6 @@ uint16_t APIConnection::try_send_sensor_info(EntityBase *entity, APIConnection * | |||||||
| bool APIConnection::send_switch_state(switch_::Switch *a_switch) { | bool APIConnection::send_switch_state(switch_::Switch *a_switch) { | ||||||
|   return this->schedule_message_(a_switch, &APIConnection::try_send_switch_state, SwitchStateResponse::MESSAGE_TYPE); |   return this->schedule_message_(a_switch, &APIConnection::try_send_switch_state, SwitchStateResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
| void APIConnection::send_switch_info(switch_::Switch *a_switch) { |  | ||||||
|   this->schedule_message_(a_switch, &APIConnection::try_send_switch_info, ListEntitiesSwitchResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| uint16_t APIConnection::try_send_switch_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_switch_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                               bool is_single) { |                                               bool is_single) { | ||||||
| @@ -632,10 +613,6 @@ bool APIConnection::send_text_sensor_state(text_sensor::TextSensor *text_sensor) | |||||||
|   return this->schedule_message_(text_sensor, &APIConnection::try_send_text_sensor_state, |   return this->schedule_message_(text_sensor, &APIConnection::try_send_text_sensor_state, | ||||||
|                                  TextSensorStateResponse::MESSAGE_TYPE); |                                  TextSensorStateResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
| void APIConnection::send_text_sensor_info(text_sensor::TextSensor *text_sensor) { |  | ||||||
|   this->schedule_message_(text_sensor, &APIConnection::try_send_text_sensor_info, |  | ||||||
|                           ListEntitiesTextSensorResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| uint16_t APIConnection::try_send_text_sensor_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_text_sensor_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                                    bool is_single) { |                                                    bool is_single) { | ||||||
| @@ -696,9 +673,6 @@ uint16_t APIConnection::try_send_climate_state(EntityBase *entity, APIConnection | |||||||
|     resp.target_humidity = climate->target_humidity; |     resp.target_humidity = climate->target_humidity; | ||||||
|   return encode_message_to_buffer(resp, ClimateStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, ClimateStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
| void APIConnection::send_climate_info(climate::Climate *climate) { |  | ||||||
|   this->schedule_message_(climate, &APIConnection::try_send_climate_info, ListEntitiesClimateResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_climate_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_climate_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                               bool is_single) { |                                               bool is_single) { | ||||||
|   auto *climate = static_cast<climate::Climate *>(entity); |   auto *climate = static_cast<climate::Climate *>(entity); | ||||||
| @@ -766,9 +740,6 @@ void APIConnection::climate_command(const ClimateCommandRequest &msg) { | |||||||
| bool APIConnection::send_number_state(number::Number *number) { | bool APIConnection::send_number_state(number::Number *number) { | ||||||
|   return this->schedule_message_(number, &APIConnection::try_send_number_state, NumberStateResponse::MESSAGE_TYPE); |   return this->schedule_message_(number, &APIConnection::try_send_number_state, NumberStateResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
| void APIConnection::send_number_info(number::Number *number) { |  | ||||||
|   this->schedule_message_(number, &APIConnection::try_send_number_info, ListEntitiesNumberResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| uint16_t APIConnection::try_send_number_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_number_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                               bool is_single) { |                                               bool is_single) { | ||||||
| @@ -820,9 +791,6 @@ uint16_t APIConnection::try_send_date_state(EntityBase *entity, APIConnection *c | |||||||
|   fill_entity_state_base(date, resp); |   fill_entity_state_base(date, resp); | ||||||
|   return encode_message_to_buffer(resp, DateStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, DateStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
| void APIConnection::send_date_info(datetime::DateEntity *date) { |  | ||||||
|   this->schedule_message_(date, &APIConnection::try_send_date_info, ListEntitiesDateResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_date_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_date_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                            bool is_single) { |                                            bool is_single) { | ||||||
|   auto *date = static_cast<datetime::DateEntity *>(entity); |   auto *date = static_cast<datetime::DateEntity *>(entity); | ||||||
| @@ -857,9 +825,6 @@ uint16_t APIConnection::try_send_time_state(EntityBase *entity, APIConnection *c | |||||||
|   fill_entity_state_base(time, resp); |   fill_entity_state_base(time, resp); | ||||||
|   return encode_message_to_buffer(resp, TimeStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, TimeStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
| void APIConnection::send_time_info(datetime::TimeEntity *time) { |  | ||||||
|   this->schedule_message_(time, &APIConnection::try_send_time_info, ListEntitiesTimeResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_time_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_time_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                            bool is_single) { |                                            bool is_single) { | ||||||
|   auto *time = static_cast<datetime::TimeEntity *>(entity); |   auto *time = static_cast<datetime::TimeEntity *>(entity); | ||||||
| @@ -896,9 +861,6 @@ uint16_t APIConnection::try_send_datetime_state(EntityBase *entity, APIConnectio | |||||||
|   fill_entity_state_base(datetime, resp); |   fill_entity_state_base(datetime, resp); | ||||||
|   return encode_message_to_buffer(resp, DateTimeStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, DateTimeStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
| void APIConnection::send_datetime_info(datetime::DateTimeEntity *datetime) { |  | ||||||
|   this->schedule_message_(datetime, &APIConnection::try_send_datetime_info, ListEntitiesDateTimeResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_datetime_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_datetime_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                                bool is_single) { |                                                bool is_single) { | ||||||
|   auto *datetime = static_cast<datetime::DateTimeEntity *>(entity); |   auto *datetime = static_cast<datetime::DateTimeEntity *>(entity); | ||||||
| @@ -922,9 +884,6 @@ void APIConnection::datetime_command(const DateTimeCommandRequest &msg) { | |||||||
| bool APIConnection::send_text_state(text::Text *text) { | bool APIConnection::send_text_state(text::Text *text) { | ||||||
|   return this->schedule_message_(text, &APIConnection::try_send_text_state, TextStateResponse::MESSAGE_TYPE); |   return this->schedule_message_(text, &APIConnection::try_send_text_state, TextStateResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
| void APIConnection::send_text_info(text::Text *text) { |  | ||||||
|   this->schedule_message_(text, &APIConnection::try_send_text_info, ListEntitiesTextResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| uint16_t APIConnection::try_send_text_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_text_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                             bool is_single) { |                                             bool is_single) { | ||||||
| @@ -963,9 +922,6 @@ void APIConnection::text_command(const TextCommandRequest &msg) { | |||||||
| bool APIConnection::send_select_state(select::Select *select) { | bool APIConnection::send_select_state(select::Select *select) { | ||||||
|   return this->schedule_message_(select, &APIConnection::try_send_select_state, SelectStateResponse::MESSAGE_TYPE); |   return this->schedule_message_(select, &APIConnection::try_send_select_state, SelectStateResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
| void APIConnection::send_select_info(select::Select *select) { |  | ||||||
|   this->schedule_message_(select, &APIConnection::try_send_select_info, ListEntitiesSelectResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| uint16_t APIConnection::try_send_select_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_select_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                               bool is_single) { |                                               bool is_single) { | ||||||
| @@ -999,9 +955,6 @@ void APIConnection::select_command(const SelectCommandRequest &msg) { | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_BUTTON | #ifdef USE_BUTTON | ||||||
| void esphome::api::APIConnection::send_button_info(button::Button *button) { |  | ||||||
|   this->schedule_message_(button, &APIConnection::try_send_button_info, ListEntitiesButtonResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_button_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_button_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                              bool is_single) { |                                              bool is_single) { | ||||||
|   auto *button = static_cast<button::Button *>(entity); |   auto *button = static_cast<button::Button *>(entity); | ||||||
| @@ -1024,9 +977,6 @@ void esphome::api::APIConnection::button_command(const ButtonCommandRequest &msg | |||||||
| bool APIConnection::send_lock_state(lock::Lock *a_lock) { | bool APIConnection::send_lock_state(lock::Lock *a_lock) { | ||||||
|   return this->schedule_message_(a_lock, &APIConnection::try_send_lock_state, LockStateResponse::MESSAGE_TYPE); |   return this->schedule_message_(a_lock, &APIConnection::try_send_lock_state, LockStateResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
| void APIConnection::send_lock_info(lock::Lock *a_lock) { |  | ||||||
|   this->schedule_message_(a_lock, &APIConnection::try_send_lock_info, ListEntitiesLockResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| uint16_t APIConnection::try_send_lock_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_lock_state(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                             bool is_single) { |                                             bool is_single) { | ||||||
| @@ -1080,9 +1030,6 @@ uint16_t APIConnection::try_send_valve_state(EntityBase *entity, APIConnection * | |||||||
|   fill_entity_state_base(valve, resp); |   fill_entity_state_base(valve, resp); | ||||||
|   return encode_message_to_buffer(resp, ValveStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, ValveStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
| void APIConnection::send_valve_info(valve::Valve *valve) { |  | ||||||
|   this->schedule_message_(valve, &APIConnection::try_send_valve_info, ListEntitiesValveResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_valve_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_valve_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                             bool is_single) { |                                             bool is_single) { | ||||||
|   auto *valve = static_cast<valve::Valve *>(entity); |   auto *valve = static_cast<valve::Valve *>(entity); | ||||||
| @@ -1128,10 +1075,6 @@ uint16_t APIConnection::try_send_media_player_state(EntityBase *entity, APIConne | |||||||
|   fill_entity_state_base(media_player, resp); |   fill_entity_state_base(media_player, resp); | ||||||
|   return encode_message_to_buffer(resp, MediaPlayerStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, MediaPlayerStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
| void APIConnection::send_media_player_info(media_player::MediaPlayer *media_player) { |  | ||||||
|   this->schedule_message_(media_player, &APIConnection::try_send_media_player_info, |  | ||||||
|                           ListEntitiesMediaPlayerResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_media_player_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_media_player_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                                    bool is_single) { |                                                    bool is_single) { | ||||||
|   auto *media_player = static_cast<media_player::MediaPlayer *>(entity); |   auto *media_player = static_cast<media_player::MediaPlayer *>(entity); | ||||||
| @@ -1183,9 +1126,6 @@ void APIConnection::set_camera_state(std::shared_ptr<esp32_camera::CameraImage> | |||||||
|       image->was_requested_by(esphome::esp32_camera::IDLE)) |       image->was_requested_by(esphome::esp32_camera::IDLE)) | ||||||
|     this->image_reader_.set_image(std::move(image)); |     this->image_reader_.set_image(std::move(image)); | ||||||
| } | } | ||||||
| void APIConnection::send_camera_info(esp32_camera::ESP32Camera *camera) { |  | ||||||
|   this->schedule_message_(camera, &APIConnection::try_send_camera_info, ListEntitiesCameraResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_camera_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_camera_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                              bool is_single) { |                                              bool is_single) { | ||||||
|   auto *camera = static_cast<esp32_camera::ESP32Camera *>(entity); |   auto *camera = static_cast<esp32_camera::ESP32Camera *>(entity); | ||||||
| @@ -1392,10 +1332,6 @@ uint16_t APIConnection::try_send_alarm_control_panel_state(EntityBase *entity, A | |||||||
|   fill_entity_state_base(a_alarm_control_panel, resp); |   fill_entity_state_base(a_alarm_control_panel, resp); | ||||||
|   return encode_message_to_buffer(resp, AlarmControlPanelStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, AlarmControlPanelStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
| void APIConnection::send_alarm_control_panel_info(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) { |  | ||||||
|   this->schedule_message_(a_alarm_control_panel, &APIConnection::try_send_alarm_control_panel_info, |  | ||||||
|                           ListEntitiesAlarmControlPanelResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_alarm_control_panel_info(EntityBase *entity, APIConnection *conn, | uint16_t APIConnection::try_send_alarm_control_panel_info(EntityBase *entity, APIConnection *conn, | ||||||
|                                                           uint32_t remaining_size, bool is_single) { |                                                           uint32_t remaining_size, bool is_single) { | ||||||
|   auto *a_alarm_control_panel = static_cast<alarm_control_panel::AlarmControlPanel *>(entity); |   auto *a_alarm_control_panel = static_cast<alarm_control_panel::AlarmControlPanel *>(entity); | ||||||
| @@ -1446,9 +1382,6 @@ void APIConnection::alarm_control_panel_command(const AlarmControlPanelCommandRe | |||||||
| void APIConnection::send_event(event::Event *event, const std::string &event_type) { | void APIConnection::send_event(event::Event *event, const std::string &event_type) { | ||||||
|   this->schedule_message_(event, MessageCreator(event_type), EventResponse::MESSAGE_TYPE); |   this->schedule_message_(event, MessageCreator(event_type), EventResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
| void APIConnection::send_event_info(event::Event *event) { |  | ||||||
|   this->schedule_message_(event, &APIConnection::try_send_event_info, ListEntitiesEventResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_event_response(event::Event *event, const std::string &event_type, APIConnection *conn, | uint16_t APIConnection::try_send_event_response(event::Event *event, const std::string &event_type, APIConnection *conn, | ||||||
|                                                 uint32_t remaining_size, bool is_single) { |                                                 uint32_t remaining_size, bool is_single) { | ||||||
|   EventResponse resp; |   EventResponse resp; | ||||||
| @@ -1494,9 +1427,6 @@ uint16_t APIConnection::try_send_update_state(EntityBase *entity, APIConnection | |||||||
|   fill_entity_state_base(update, resp); |   fill_entity_state_base(update, resp); | ||||||
|   return encode_message_to_buffer(resp, UpdateStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, UpdateStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
| void APIConnection::send_update_info(update::UpdateEntity *update) { |  | ||||||
|   this->schedule_message_(update, &APIConnection::try_send_update_info, ListEntitiesUpdateResponse::MESSAGE_TYPE); |  | ||||||
| } |  | ||||||
| uint16_t APIConnection::try_send_update_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_update_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
|                                              bool is_single) { |                                              bool is_single) { | ||||||
|   auto *update = static_cast<update::UpdateEntity *>(entity); |   auto *update = static_cast<update::UpdateEntity *>(entity); | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ static constexpr uint32_t KEEPALIVE_TIMEOUT_MS = 60000; | |||||||
| class APIConnection : public APIServerConnection { | class APIConnection : public APIServerConnection { | ||||||
|  public: |  public: | ||||||
|   friend class APIServer; |   friend class APIServer; | ||||||
|  |   friend class ListEntitiesIterator; | ||||||
|   APIConnection(std::unique_ptr<socket::Socket> socket, APIServer *parent); |   APIConnection(std::unique_ptr<socket::Socket> socket, APIServer *parent); | ||||||
|   virtual ~APIConnection(); |   virtual ~APIConnection(); | ||||||
|  |  | ||||||
| @@ -34,93 +35,74 @@ class APIConnection : public APIServerConnection { | |||||||
|   } |   } | ||||||
| #ifdef USE_BINARY_SENSOR | #ifdef USE_BINARY_SENSOR | ||||||
|   bool send_binary_sensor_state(binary_sensor::BinarySensor *binary_sensor); |   bool send_binary_sensor_state(binary_sensor::BinarySensor *binary_sensor); | ||||||
|   void send_binary_sensor_info(binary_sensor::BinarySensor *binary_sensor); |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_COVER | #ifdef USE_COVER | ||||||
|   bool send_cover_state(cover::Cover *cover); |   bool send_cover_state(cover::Cover *cover); | ||||||
|   void send_cover_info(cover::Cover *cover); |  | ||||||
|   void cover_command(const CoverCommandRequest &msg) override; |   void cover_command(const CoverCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_FAN | #ifdef USE_FAN | ||||||
|   bool send_fan_state(fan::Fan *fan); |   bool send_fan_state(fan::Fan *fan); | ||||||
|   void send_fan_info(fan::Fan *fan); |  | ||||||
|   void fan_command(const FanCommandRequest &msg) override; |   void fan_command(const FanCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_LIGHT | #ifdef USE_LIGHT | ||||||
|   bool send_light_state(light::LightState *light); |   bool send_light_state(light::LightState *light); | ||||||
|   void send_light_info(light::LightState *light); |  | ||||||
|   void light_command(const LightCommandRequest &msg) override; |   void light_command(const LightCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SENSOR | #ifdef USE_SENSOR | ||||||
|   bool send_sensor_state(sensor::Sensor *sensor); |   bool send_sensor_state(sensor::Sensor *sensor); | ||||||
|   void send_sensor_info(sensor::Sensor *sensor); |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SWITCH | #ifdef USE_SWITCH | ||||||
|   bool send_switch_state(switch_::Switch *a_switch); |   bool send_switch_state(switch_::Switch *a_switch); | ||||||
|   void send_switch_info(switch_::Switch *a_switch); |  | ||||||
|   void switch_command(const SwitchCommandRequest &msg) override; |   void switch_command(const SwitchCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_TEXT_SENSOR | #ifdef USE_TEXT_SENSOR | ||||||
|   bool send_text_sensor_state(text_sensor::TextSensor *text_sensor); |   bool send_text_sensor_state(text_sensor::TextSensor *text_sensor); | ||||||
|   void send_text_sensor_info(text_sensor::TextSensor *text_sensor); |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_ESP32_CAMERA | #ifdef USE_ESP32_CAMERA | ||||||
|   void set_camera_state(std::shared_ptr<esp32_camera::CameraImage> image); |   void set_camera_state(std::shared_ptr<esp32_camera::CameraImage> image); | ||||||
|   void send_camera_info(esp32_camera::ESP32Camera *camera); |  | ||||||
|   void camera_image(const CameraImageRequest &msg) override; |   void camera_image(const CameraImageRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_CLIMATE | #ifdef USE_CLIMATE | ||||||
|   bool send_climate_state(climate::Climate *climate); |   bool send_climate_state(climate::Climate *climate); | ||||||
|   void send_climate_info(climate::Climate *climate); |  | ||||||
|   void climate_command(const ClimateCommandRequest &msg) override; |   void climate_command(const ClimateCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_NUMBER | #ifdef USE_NUMBER | ||||||
|   bool send_number_state(number::Number *number); |   bool send_number_state(number::Number *number); | ||||||
|   void send_number_info(number::Number *number); |  | ||||||
|   void number_command(const NumberCommandRequest &msg) override; |   void number_command(const NumberCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_DATETIME_DATE | #ifdef USE_DATETIME_DATE | ||||||
|   bool send_date_state(datetime::DateEntity *date); |   bool send_date_state(datetime::DateEntity *date); | ||||||
|   void send_date_info(datetime::DateEntity *date); |  | ||||||
|   void date_command(const DateCommandRequest &msg) override; |   void date_command(const DateCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_DATETIME_TIME | #ifdef USE_DATETIME_TIME | ||||||
|   bool send_time_state(datetime::TimeEntity *time); |   bool send_time_state(datetime::TimeEntity *time); | ||||||
|   void send_time_info(datetime::TimeEntity *time); |  | ||||||
|   void time_command(const TimeCommandRequest &msg) override; |   void time_command(const TimeCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_DATETIME_DATETIME | #ifdef USE_DATETIME_DATETIME | ||||||
|   bool send_datetime_state(datetime::DateTimeEntity *datetime); |   bool send_datetime_state(datetime::DateTimeEntity *datetime); | ||||||
|   void send_datetime_info(datetime::DateTimeEntity *datetime); |  | ||||||
|   void datetime_command(const DateTimeCommandRequest &msg) override; |   void datetime_command(const DateTimeCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_TEXT | #ifdef USE_TEXT | ||||||
|   bool send_text_state(text::Text *text); |   bool send_text_state(text::Text *text); | ||||||
|   void send_text_info(text::Text *text); |  | ||||||
|   void text_command(const TextCommandRequest &msg) override; |   void text_command(const TextCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SELECT | #ifdef USE_SELECT | ||||||
|   bool send_select_state(select::Select *select); |   bool send_select_state(select::Select *select); | ||||||
|   void send_select_info(select::Select *select); |  | ||||||
|   void select_command(const SelectCommandRequest &msg) override; |   void select_command(const SelectCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_BUTTON | #ifdef USE_BUTTON | ||||||
|   void send_button_info(button::Button *button); |  | ||||||
|   void button_command(const ButtonCommandRequest &msg) override; |   void button_command(const ButtonCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_LOCK | #ifdef USE_LOCK | ||||||
|   bool send_lock_state(lock::Lock *a_lock); |   bool send_lock_state(lock::Lock *a_lock); | ||||||
|   void send_lock_info(lock::Lock *a_lock); |  | ||||||
|   void lock_command(const LockCommandRequest &msg) override; |   void lock_command(const LockCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_VALVE | #ifdef USE_VALVE | ||||||
|   bool send_valve_state(valve::Valve *valve); |   bool send_valve_state(valve::Valve *valve); | ||||||
|   void send_valve_info(valve::Valve *valve); |  | ||||||
|   void valve_command(const ValveCommandRequest &msg) override; |   void valve_command(const ValveCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_MEDIA_PLAYER | #ifdef USE_MEDIA_PLAYER | ||||||
|   bool send_media_player_state(media_player::MediaPlayer *media_player); |   bool send_media_player_state(media_player::MediaPlayer *media_player); | ||||||
|   void send_media_player_info(media_player::MediaPlayer *media_player); |  | ||||||
|   void media_player_command(const MediaPlayerCommandRequest &msg) override; |   void media_player_command(const MediaPlayerCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
|   bool try_send_log_message(int level, const char *tag, const char *line); |   bool try_send_log_message(int level, const char *tag, const char *line); | ||||||
| @@ -167,18 +149,15 @@ class APIConnection : public APIServerConnection { | |||||||
|  |  | ||||||
| #ifdef USE_ALARM_CONTROL_PANEL | #ifdef USE_ALARM_CONTROL_PANEL | ||||||
|   bool send_alarm_control_panel_state(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel); |   bool send_alarm_control_panel_state(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel); | ||||||
|   void send_alarm_control_panel_info(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel); |  | ||||||
|   void alarm_control_panel_command(const AlarmControlPanelCommandRequest &msg) override; |   void alarm_control_panel_command(const AlarmControlPanelCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_EVENT | #ifdef USE_EVENT | ||||||
|   void send_event(event::Event *event, const std::string &event_type); |   void send_event(event::Event *event, const std::string &event_type); | ||||||
|   void send_event_info(event::Event *event); |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_UPDATE | #ifdef USE_UPDATE | ||||||
|   bool send_update_state(update::UpdateEntity *update); |   bool send_update_state(update::UpdateEntity *update); | ||||||
|   void send_update_info(update::UpdateEntity *update); |  | ||||||
|   void update_command(const UpdateCommandRequest &msg) override; |   void update_command(const UpdateCommandRequest &msg) override; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| #include "list_entities.h" | #include "list_entities.h" | ||||||
| #ifdef USE_API | #ifdef USE_API | ||||||
| #include "api_connection.h" | #include "api_connection.h" | ||||||
|  | #include "api_pb2.h" | ||||||
| #include "esphome/core/application.h" | #include "esphome/core/application.h" | ||||||
| #include "esphome/core/log.h" | #include "esphome/core/log.h" | ||||||
| #include "esphome/core/util.h" | #include "esphome/core/util.h" | ||||||
| @@ -8,155 +9,85 @@ | |||||||
| namespace esphome { | namespace esphome { | ||||||
| namespace api { | namespace api { | ||||||
|  |  | ||||||
|  | // Generate entity handler implementations using macros | ||||||
| #ifdef USE_BINARY_SENSOR | #ifdef USE_BINARY_SENSOR | ||||||
| bool ListEntitiesIterator::on_binary_sensor(binary_sensor::BinarySensor *binary_sensor) { | LIST_ENTITIES_HANDLER(binary_sensor, binary_sensor::BinarySensor, ListEntitiesBinarySensorResponse) | ||||||
|   this->client_->send_binary_sensor_info(binary_sensor); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_COVER | #ifdef USE_COVER | ||||||
| bool ListEntitiesIterator::on_cover(cover::Cover *cover) { | LIST_ENTITIES_HANDLER(cover, cover::Cover, ListEntitiesCoverResponse) | ||||||
|   this->client_->send_cover_info(cover); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_FAN | #ifdef USE_FAN | ||||||
| bool ListEntitiesIterator::on_fan(fan::Fan *fan) { | LIST_ENTITIES_HANDLER(fan, fan::Fan, ListEntitiesFanResponse) | ||||||
|   this->client_->send_fan_info(fan); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_LIGHT | #ifdef USE_LIGHT | ||||||
| bool ListEntitiesIterator::on_light(light::LightState *light) { | LIST_ENTITIES_HANDLER(light, light::LightState, ListEntitiesLightResponse) | ||||||
|   this->client_->send_light_info(light); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SENSOR | #ifdef USE_SENSOR | ||||||
| bool ListEntitiesIterator::on_sensor(sensor::Sensor *sensor) { | LIST_ENTITIES_HANDLER(sensor, sensor::Sensor, ListEntitiesSensorResponse) | ||||||
|   this->client_->send_sensor_info(sensor); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SWITCH | #ifdef USE_SWITCH | ||||||
| bool ListEntitiesIterator::on_switch(switch_::Switch *a_switch) { | LIST_ENTITIES_HANDLER(switch, switch_::Switch, ListEntitiesSwitchResponse) | ||||||
|   this->client_->send_switch_info(a_switch); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_BUTTON | #ifdef USE_BUTTON | ||||||
| bool ListEntitiesIterator::on_button(button::Button *button) { | LIST_ENTITIES_HANDLER(button, button::Button, ListEntitiesButtonResponse) | ||||||
|   this->client_->send_button_info(button); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_TEXT_SENSOR | #ifdef USE_TEXT_SENSOR | ||||||
| bool ListEntitiesIterator::on_text_sensor(text_sensor::TextSensor *text_sensor) { | LIST_ENTITIES_HANDLER(text_sensor, text_sensor::TextSensor, ListEntitiesTextSensorResponse) | ||||||
|   this->client_->send_text_sensor_info(text_sensor); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_LOCK | #ifdef USE_LOCK | ||||||
| bool ListEntitiesIterator::on_lock(lock::Lock *a_lock) { | LIST_ENTITIES_HANDLER(lock, lock::Lock, ListEntitiesLockResponse) | ||||||
|   this->client_->send_lock_info(a_lock); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_VALVE | #ifdef USE_VALVE | ||||||
| bool ListEntitiesIterator::on_valve(valve::Valve *valve) { | LIST_ENTITIES_HANDLER(valve, valve::Valve, ListEntitiesValveResponse) | ||||||
|   this->client_->send_valve_info(valve); | #endif | ||||||
|   return true; | #ifdef USE_ESP32_CAMERA | ||||||
| } | LIST_ENTITIES_HANDLER(camera, esp32_camera::ESP32Camera, ListEntitiesCameraResponse) | ||||||
|  | #endif | ||||||
|  | #ifdef USE_CLIMATE | ||||||
|  | LIST_ENTITIES_HANDLER(climate, climate::Climate, ListEntitiesClimateResponse) | ||||||
|  | #endif | ||||||
|  | #ifdef USE_NUMBER | ||||||
|  | LIST_ENTITIES_HANDLER(number, number::Number, ListEntitiesNumberResponse) | ||||||
|  | #endif | ||||||
|  | #ifdef USE_DATETIME_DATE | ||||||
|  | LIST_ENTITIES_HANDLER(date, datetime::DateEntity, ListEntitiesDateResponse) | ||||||
|  | #endif | ||||||
|  | #ifdef USE_DATETIME_TIME | ||||||
|  | LIST_ENTITIES_HANDLER(time, datetime::TimeEntity, ListEntitiesTimeResponse) | ||||||
|  | #endif | ||||||
|  | #ifdef USE_DATETIME_DATETIME | ||||||
|  | LIST_ENTITIES_HANDLER(datetime, datetime::DateTimeEntity, ListEntitiesDateTimeResponse) | ||||||
|  | #endif | ||||||
|  | #ifdef USE_TEXT | ||||||
|  | LIST_ENTITIES_HANDLER(text, text::Text, ListEntitiesTextResponse) | ||||||
|  | #endif | ||||||
|  | #ifdef USE_SELECT | ||||||
|  | LIST_ENTITIES_HANDLER(select, select::Select, ListEntitiesSelectResponse) | ||||||
|  | #endif | ||||||
|  | #ifdef USE_MEDIA_PLAYER | ||||||
|  | LIST_ENTITIES_HANDLER(media_player, media_player::MediaPlayer, ListEntitiesMediaPlayerResponse) | ||||||
|  | #endif | ||||||
|  | #ifdef USE_ALARM_CONTROL_PANEL | ||||||
|  | LIST_ENTITIES_HANDLER(alarm_control_panel, alarm_control_panel::AlarmControlPanel, | ||||||
|  |                       ListEntitiesAlarmControlPanelResponse) | ||||||
|  | #endif | ||||||
|  | #ifdef USE_EVENT | ||||||
|  | LIST_ENTITIES_HANDLER(event, event::Event, ListEntitiesEventResponse) | ||||||
|  | #endif | ||||||
|  | #ifdef USE_UPDATE | ||||||
|  | LIST_ENTITIES_HANDLER(update, update::UpdateEntity, ListEntitiesUpdateResponse) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | // Special cases that don't follow the pattern | ||||||
| bool ListEntitiesIterator::on_end() { return this->client_->send_list_info_done(); } | bool ListEntitiesIterator::on_end() { return this->client_->send_list_info_done(); } | ||||||
|  |  | ||||||
| ListEntitiesIterator::ListEntitiesIterator(APIConnection *client) : client_(client) {} | ListEntitiesIterator::ListEntitiesIterator(APIConnection *client) : client_(client) {} | ||||||
|  |  | ||||||
| bool ListEntitiesIterator::on_service(UserServiceDescriptor *service) { | bool ListEntitiesIterator::on_service(UserServiceDescriptor *service) { | ||||||
|   auto resp = service->encode_list_service_response(); |   auto resp = service->encode_list_service_response(); | ||||||
|   return this->client_->send_message(resp); |   return this->client_->send_message(resp); | ||||||
| } | } | ||||||
|  |  | ||||||
| #ifdef USE_ESP32_CAMERA |  | ||||||
| bool ListEntitiesIterator::on_camera(esp32_camera::ESP32Camera *camera) { |  | ||||||
|   this->client_->send_camera_info(camera); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef USE_CLIMATE |  | ||||||
| bool ListEntitiesIterator::on_climate(climate::Climate *climate) { |  | ||||||
|   this->client_->send_climate_info(climate); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef USE_NUMBER |  | ||||||
| bool ListEntitiesIterator::on_number(number::Number *number) { |  | ||||||
|   this->client_->send_number_info(number); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef USE_DATETIME_DATE |  | ||||||
| bool ListEntitiesIterator::on_date(datetime::DateEntity *date) { |  | ||||||
|   this->client_->send_date_info(date); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef USE_DATETIME_TIME |  | ||||||
| bool ListEntitiesIterator::on_time(datetime::TimeEntity *time) { |  | ||||||
|   this->client_->send_time_info(time); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef USE_DATETIME_DATETIME |  | ||||||
| bool ListEntitiesIterator::on_datetime(datetime::DateTimeEntity *datetime) { |  | ||||||
|   this->client_->send_datetime_info(datetime); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef USE_TEXT |  | ||||||
| bool ListEntitiesIterator::on_text(text::Text *text) { |  | ||||||
|   this->client_->send_text_info(text); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef USE_SELECT |  | ||||||
| bool ListEntitiesIterator::on_select(select::Select *select) { |  | ||||||
|   this->client_->send_select_info(select); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef USE_MEDIA_PLAYER |  | ||||||
| bool ListEntitiesIterator::on_media_player(media_player::MediaPlayer *media_player) { |  | ||||||
|   this->client_->send_media_player_info(media_player); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #ifdef USE_ALARM_CONTROL_PANEL |  | ||||||
| bool ListEntitiesIterator::on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) { |  | ||||||
|   this->client_->send_alarm_control_panel_info(a_alarm_control_panel); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #ifdef USE_EVENT |  | ||||||
| bool ListEntitiesIterator::on_event(event::Event *event) { |  | ||||||
|   this->client_->send_event_info(event); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #ifdef USE_UPDATE |  | ||||||
| bool ListEntitiesIterator::on_update(update::UpdateEntity *update) { |  | ||||||
|   this->client_->send_update_info(update); |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| }  // namespace api | }  // namespace api | ||||||
| }  // namespace esphome | }  // namespace esphome | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -9,75 +9,83 @@ namespace api { | |||||||
|  |  | ||||||
| class APIConnection; | class APIConnection; | ||||||
|  |  | ||||||
|  | // Macro for generating ListEntitiesIterator handlers | ||||||
|  | // Calls schedule_message_ with try_send_*_info | ||||||
|  | #define LIST_ENTITIES_HANDLER(entity_type, EntityClass, ResponseType) \ | ||||||
|  |   bool ListEntitiesIterator::on_##entity_type(EntityClass *entity) { /* NOLINT(bugprone-macro-parentheses) */ \ | ||||||
|  |     return this->client_->schedule_message_(entity, &APIConnection::try_send_##entity_type##_info, \ | ||||||
|  |                                             ResponseType::MESSAGE_TYPE); \ | ||||||
|  |   } | ||||||
|  |  | ||||||
| class ListEntitiesIterator : public ComponentIterator { | class ListEntitiesIterator : public ComponentIterator { | ||||||
|  public: |  public: | ||||||
|   ListEntitiesIterator(APIConnection *client); |   ListEntitiesIterator(APIConnection *client); | ||||||
| #ifdef USE_BINARY_SENSOR | #ifdef USE_BINARY_SENSOR | ||||||
|   bool on_binary_sensor(binary_sensor::BinarySensor *binary_sensor) override; |   bool on_binary_sensor(binary_sensor::BinarySensor *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_COVER | #ifdef USE_COVER | ||||||
|   bool on_cover(cover::Cover *cover) override; |   bool on_cover(cover::Cover *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_FAN | #ifdef USE_FAN | ||||||
|   bool on_fan(fan::Fan *fan) override; |   bool on_fan(fan::Fan *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_LIGHT | #ifdef USE_LIGHT | ||||||
|   bool on_light(light::LightState *light) override; |   bool on_light(light::LightState *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SENSOR | #ifdef USE_SENSOR | ||||||
|   bool on_sensor(sensor::Sensor *sensor) override; |   bool on_sensor(sensor::Sensor *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SWITCH | #ifdef USE_SWITCH | ||||||
|   bool on_switch(switch_::Switch *a_switch) override; |   bool on_switch(switch_::Switch *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_BUTTON | #ifdef USE_BUTTON | ||||||
|   bool on_button(button::Button *button) override; |   bool on_button(button::Button *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_TEXT_SENSOR | #ifdef USE_TEXT_SENSOR | ||||||
|   bool on_text_sensor(text_sensor::TextSensor *text_sensor) override; |   bool on_text_sensor(text_sensor::TextSensor *entity) override; | ||||||
| #endif | #endif | ||||||
|   bool on_service(UserServiceDescriptor *service) override; |   bool on_service(UserServiceDescriptor *service) override; | ||||||
| #ifdef USE_ESP32_CAMERA | #ifdef USE_ESP32_CAMERA | ||||||
|   bool on_camera(esp32_camera::ESP32Camera *camera) override; |   bool on_camera(esp32_camera::ESP32Camera *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_CLIMATE | #ifdef USE_CLIMATE | ||||||
|   bool on_climate(climate::Climate *climate) override; |   bool on_climate(climate::Climate *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_NUMBER | #ifdef USE_NUMBER | ||||||
|   bool on_number(number::Number *number) override; |   bool on_number(number::Number *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_DATETIME_DATE | #ifdef USE_DATETIME_DATE | ||||||
|   bool on_date(datetime::DateEntity *date) override; |   bool on_date(datetime::DateEntity *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_DATETIME_TIME | #ifdef USE_DATETIME_TIME | ||||||
|   bool on_time(datetime::TimeEntity *time) override; |   bool on_time(datetime::TimeEntity *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_DATETIME_DATETIME | #ifdef USE_DATETIME_DATETIME | ||||||
|   bool on_datetime(datetime::DateTimeEntity *datetime) override; |   bool on_datetime(datetime::DateTimeEntity *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_TEXT | #ifdef USE_TEXT | ||||||
|   bool on_text(text::Text *text) override; |   bool on_text(text::Text *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SELECT | #ifdef USE_SELECT | ||||||
|   bool on_select(select::Select *select) override; |   bool on_select(select::Select *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_LOCK | #ifdef USE_LOCK | ||||||
|   bool on_lock(lock::Lock *a_lock) override; |   bool on_lock(lock::Lock *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_VALVE | #ifdef USE_VALVE | ||||||
|   bool on_valve(valve::Valve *valve) override; |   bool on_valve(valve::Valve *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_MEDIA_PLAYER | #ifdef USE_MEDIA_PLAYER | ||||||
|   bool on_media_player(media_player::MediaPlayer *media_player) override; |   bool on_media_player(media_player::MediaPlayer *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_ALARM_CONTROL_PANEL | #ifdef USE_ALARM_CONTROL_PANEL | ||||||
|   bool on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) override; |   bool on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_EVENT | #ifdef USE_EVENT | ||||||
|   bool on_event(event::Event *event) override; |   bool on_event(event::Event *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_UPDATE | #ifdef USE_UPDATE | ||||||
|   bool on_update(update::UpdateEntity *update) override; |   bool on_update(update::UpdateEntity *entity) override; | ||||||
| #endif | #endif | ||||||
|   bool on_end() override; |   bool on_end() override; | ||||||
|   bool completed() { return this->state_ == IteratorState::NONE; } |   bool completed() { return this->state_ == IteratorState::NONE; } | ||||||
|   | |||||||
| @@ -6,73 +6,67 @@ | |||||||
| namespace esphome { | namespace esphome { | ||||||
| namespace api { | namespace api { | ||||||
|  |  | ||||||
|  | // Generate entity handler implementations using macros | ||||||
| #ifdef USE_BINARY_SENSOR | #ifdef USE_BINARY_SENSOR | ||||||
| bool InitialStateIterator::on_binary_sensor(binary_sensor::BinarySensor *binary_sensor) { | INITIAL_STATE_HANDLER(binary_sensor, binary_sensor::BinarySensor) | ||||||
|   return this->client_->send_binary_sensor_state(binary_sensor); |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_COVER | #ifdef USE_COVER | ||||||
| bool InitialStateIterator::on_cover(cover::Cover *cover) { return this->client_->send_cover_state(cover); } | INITIAL_STATE_HANDLER(cover, cover::Cover) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_FAN | #ifdef USE_FAN | ||||||
| bool InitialStateIterator::on_fan(fan::Fan *fan) { return this->client_->send_fan_state(fan); } | INITIAL_STATE_HANDLER(fan, fan::Fan) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_LIGHT | #ifdef USE_LIGHT | ||||||
| bool InitialStateIterator::on_light(light::LightState *light) { return this->client_->send_light_state(light); } | INITIAL_STATE_HANDLER(light, light::LightState) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SENSOR | #ifdef USE_SENSOR | ||||||
| bool InitialStateIterator::on_sensor(sensor::Sensor *sensor) { return this->client_->send_sensor_state(sensor); } | INITIAL_STATE_HANDLER(sensor, sensor::Sensor) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SWITCH | #ifdef USE_SWITCH | ||||||
| bool InitialStateIterator::on_switch(switch_::Switch *a_switch) { return this->client_->send_switch_state(a_switch); } | INITIAL_STATE_HANDLER(switch, switch_::Switch) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_TEXT_SENSOR | #ifdef USE_TEXT_SENSOR | ||||||
| bool InitialStateIterator::on_text_sensor(text_sensor::TextSensor *text_sensor) { | INITIAL_STATE_HANDLER(text_sensor, text_sensor::TextSensor) | ||||||
|   return this->client_->send_text_sensor_state(text_sensor); |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_CLIMATE | #ifdef USE_CLIMATE | ||||||
| bool InitialStateIterator::on_climate(climate::Climate *climate) { return this->client_->send_climate_state(climate); } | INITIAL_STATE_HANDLER(climate, climate::Climate) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_NUMBER | #ifdef USE_NUMBER | ||||||
| bool InitialStateIterator::on_number(number::Number *number) { return this->client_->send_number_state(number); } | INITIAL_STATE_HANDLER(number, number::Number) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_DATETIME_DATE | #ifdef USE_DATETIME_DATE | ||||||
| bool InitialStateIterator::on_date(datetime::DateEntity *date) { return this->client_->send_date_state(date); } | INITIAL_STATE_HANDLER(date, datetime::DateEntity) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_DATETIME_TIME | #ifdef USE_DATETIME_TIME | ||||||
| bool InitialStateIterator::on_time(datetime::TimeEntity *time) { return this->client_->send_time_state(time); } | INITIAL_STATE_HANDLER(time, datetime::TimeEntity) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_DATETIME_DATETIME | #ifdef USE_DATETIME_DATETIME | ||||||
| bool InitialStateIterator::on_datetime(datetime::DateTimeEntity *datetime) { | INITIAL_STATE_HANDLER(datetime, datetime::DateTimeEntity) | ||||||
|   return this->client_->send_datetime_state(datetime); |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_TEXT | #ifdef USE_TEXT | ||||||
| bool InitialStateIterator::on_text(text::Text *text) { return this->client_->send_text_state(text); } | INITIAL_STATE_HANDLER(text, text::Text) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SELECT | #ifdef USE_SELECT | ||||||
| bool InitialStateIterator::on_select(select::Select *select) { return this->client_->send_select_state(select); } | INITIAL_STATE_HANDLER(select, select::Select) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_LOCK | #ifdef USE_LOCK | ||||||
| bool InitialStateIterator::on_lock(lock::Lock *a_lock) { return this->client_->send_lock_state(a_lock); } | INITIAL_STATE_HANDLER(lock, lock::Lock) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_VALVE | #ifdef USE_VALVE | ||||||
| bool InitialStateIterator::on_valve(valve::Valve *valve) { return this->client_->send_valve_state(valve); } | INITIAL_STATE_HANDLER(valve, valve::Valve) | ||||||
| #endif | #endif | ||||||
| #ifdef USE_MEDIA_PLAYER | #ifdef USE_MEDIA_PLAYER | ||||||
| bool InitialStateIterator::on_media_player(media_player::MediaPlayer *media_player) { | INITIAL_STATE_HANDLER(media_player, media_player::MediaPlayer) | ||||||
|   return this->client_->send_media_player_state(media_player); |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_ALARM_CONTROL_PANEL | #ifdef USE_ALARM_CONTROL_PANEL | ||||||
| bool InitialStateIterator::on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) { | INITIAL_STATE_HANDLER(alarm_control_panel, alarm_control_panel::AlarmControlPanel) | ||||||
|   return this->client_->send_alarm_control_panel_state(a_alarm_control_panel); |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
| #ifdef USE_UPDATE | #ifdef USE_UPDATE | ||||||
| bool InitialStateIterator::on_update(update::UpdateEntity *update) { return this->client_->send_update_state(update); } | INITIAL_STATE_HANDLER(update, update::UpdateEntity) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | // Special cases (button and event) are already defined inline in subscribe_state.h | ||||||
|  |  | ||||||
| InitialStateIterator::InitialStateIterator(APIConnection *client) : client_(client) {} | InitialStateIterator::InitialStateIterator(APIConnection *client) : client_(client) {} | ||||||
|  |  | ||||||
| }  // namespace api | }  // namespace api | ||||||
|   | |||||||
| @@ -10,71 +10,78 @@ namespace api { | |||||||
|  |  | ||||||
| class APIConnection; | class APIConnection; | ||||||
|  |  | ||||||
|  | // Macro for generating InitialStateIterator handlers | ||||||
|  | // Calls send_*_state | ||||||
|  | #define INITIAL_STATE_HANDLER(entity_type, EntityClass) \ | ||||||
|  |   bool InitialStateIterator::on_##entity_type(EntityClass *entity) { /* NOLINT(bugprone-macro-parentheses) */ \ | ||||||
|  |     return this->client_->send_##entity_type##_state(entity); \ | ||||||
|  |   } | ||||||
|  |  | ||||||
| class InitialStateIterator : public ComponentIterator { | class InitialStateIterator : public ComponentIterator { | ||||||
|  public: |  public: | ||||||
|   InitialStateIterator(APIConnection *client); |   InitialStateIterator(APIConnection *client); | ||||||
| #ifdef USE_BINARY_SENSOR | #ifdef USE_BINARY_SENSOR | ||||||
|   bool on_binary_sensor(binary_sensor::BinarySensor *binary_sensor) override; |   bool on_binary_sensor(binary_sensor::BinarySensor *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_COVER | #ifdef USE_COVER | ||||||
|   bool on_cover(cover::Cover *cover) override; |   bool on_cover(cover::Cover *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_FAN | #ifdef USE_FAN | ||||||
|   bool on_fan(fan::Fan *fan) override; |   bool on_fan(fan::Fan *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_LIGHT | #ifdef USE_LIGHT | ||||||
|   bool on_light(light::LightState *light) override; |   bool on_light(light::LightState *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SENSOR | #ifdef USE_SENSOR | ||||||
|   bool on_sensor(sensor::Sensor *sensor) override; |   bool on_sensor(sensor::Sensor *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SWITCH | #ifdef USE_SWITCH | ||||||
|   bool on_switch(switch_::Switch *a_switch) override; |   bool on_switch(switch_::Switch *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_BUTTON | #ifdef USE_BUTTON | ||||||
|   bool on_button(button::Button *button) override { return true; }; |   bool on_button(button::Button *button) override { return true; }; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_TEXT_SENSOR | #ifdef USE_TEXT_SENSOR | ||||||
|   bool on_text_sensor(text_sensor::TextSensor *text_sensor) override; |   bool on_text_sensor(text_sensor::TextSensor *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_CLIMATE | #ifdef USE_CLIMATE | ||||||
|   bool on_climate(climate::Climate *climate) override; |   bool on_climate(climate::Climate *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_NUMBER | #ifdef USE_NUMBER | ||||||
|   bool on_number(number::Number *number) override; |   bool on_number(number::Number *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_DATETIME_DATE | #ifdef USE_DATETIME_DATE | ||||||
|   bool on_date(datetime::DateEntity *date) override; |   bool on_date(datetime::DateEntity *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_DATETIME_TIME | #ifdef USE_DATETIME_TIME | ||||||
|   bool on_time(datetime::TimeEntity *time) override; |   bool on_time(datetime::TimeEntity *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_DATETIME_DATETIME | #ifdef USE_DATETIME_DATETIME | ||||||
|   bool on_datetime(datetime::DateTimeEntity *datetime) override; |   bool on_datetime(datetime::DateTimeEntity *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_TEXT | #ifdef USE_TEXT | ||||||
|   bool on_text(text::Text *text) override; |   bool on_text(text::Text *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_SELECT | #ifdef USE_SELECT | ||||||
|   bool on_select(select::Select *select) override; |   bool on_select(select::Select *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_LOCK | #ifdef USE_LOCK | ||||||
|   bool on_lock(lock::Lock *a_lock) override; |   bool on_lock(lock::Lock *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_VALVE | #ifdef USE_VALVE | ||||||
|   bool on_valve(valve::Valve *valve) override; |   bool on_valve(valve::Valve *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_MEDIA_PLAYER | #ifdef USE_MEDIA_PLAYER | ||||||
|   bool on_media_player(media_player::MediaPlayer *media_player) override; |   bool on_media_player(media_player::MediaPlayer *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_ALARM_CONTROL_PANEL | #ifdef USE_ALARM_CONTROL_PANEL | ||||||
|   bool on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) override; |   bool on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *entity) override; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_EVENT | #ifdef USE_EVENT | ||||||
|   bool on_event(event::Event *event) override { return true; }; |   bool on_event(event::Event *event) override { return true; }; | ||||||
| #endif | #endif | ||||||
| #ifdef USE_UPDATE | #ifdef USE_UPDATE | ||||||
|   bool on_update(update::UpdateEntity *update) override; |   bool on_update(update::UpdateEntity *entity) override; | ||||||
| #endif | #endif | ||||||
|   bool completed() { return this->state_ == IteratorState::NONE; } |   bool completed() { return this->state_ == IteratorState::NONE; } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user