mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	Add common base classes for entity protobuf messages to reduce duplicate code
This commit is contained in:
		| @@ -266,6 +266,7 @@ enum EntityCategory { | |||||||
| // ==================== BINARY SENSOR ==================== | // ==================== BINARY SENSOR ==================== | ||||||
| message ListEntitiesBinarySensorResponse { | message ListEntitiesBinarySensorResponse { | ||||||
|   option (id) = 12; |   option (id) = 12; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_BINARY_SENSOR"; |   option (ifdef) = "USE_BINARY_SENSOR"; | ||||||
|  |  | ||||||
| @@ -282,6 +283,7 @@ message ListEntitiesBinarySensorResponse { | |||||||
| } | } | ||||||
| message BinarySensorStateResponse { | message BinarySensorStateResponse { | ||||||
|   option (id) = 21; |   option (id) = 21; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_BINARY_SENSOR"; |   option (ifdef) = "USE_BINARY_SENSOR"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -296,6 +298,7 @@ message BinarySensorStateResponse { | |||||||
| // ==================== COVER ==================== | // ==================== COVER ==================== | ||||||
| message ListEntitiesCoverResponse { | message ListEntitiesCoverResponse { | ||||||
|   option (id) = 13; |   option (id) = 13; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_COVER"; |   option (ifdef) = "USE_COVER"; | ||||||
|  |  | ||||||
| @@ -325,6 +328,7 @@ enum CoverOperation { | |||||||
| } | } | ||||||
| message CoverStateResponse { | message CoverStateResponse { | ||||||
|   option (id) = 22; |   option (id) = 22; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_COVER"; |   option (ifdef) = "USE_COVER"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -367,6 +371,7 @@ message CoverCommandRequest { | |||||||
| // ==================== FAN ==================== | // ==================== FAN ==================== | ||||||
| message ListEntitiesFanResponse { | message ListEntitiesFanResponse { | ||||||
|   option (id) = 14; |   option (id) = 14; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_FAN"; |   option (ifdef) = "USE_FAN"; | ||||||
|  |  | ||||||
| @@ -395,6 +400,7 @@ enum FanDirection { | |||||||
| } | } | ||||||
| message FanStateResponse { | message FanStateResponse { | ||||||
|   option (id) = 23; |   option (id) = 23; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_FAN"; |   option (ifdef) = "USE_FAN"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -444,6 +450,7 @@ enum ColorMode { | |||||||
| } | } | ||||||
| message ListEntitiesLightResponse { | message ListEntitiesLightResponse { | ||||||
|   option (id) = 15; |   option (id) = 15; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_LIGHT"; |   option (ifdef) = "USE_LIGHT"; | ||||||
|  |  | ||||||
| @@ -467,6 +474,7 @@ message ListEntitiesLightResponse { | |||||||
| } | } | ||||||
| message LightStateResponse { | message LightStateResponse { | ||||||
|   option (id) = 24; |   option (id) = 24; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_LIGHT"; |   option (ifdef) = "USE_LIGHT"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -536,6 +544,7 @@ enum SensorLastResetType { | |||||||
|  |  | ||||||
| message ListEntitiesSensorResponse { | message ListEntitiesSensorResponse { | ||||||
|   option (id) = 16; |   option (id) = 16; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_SENSOR"; |   option (ifdef) = "USE_SENSOR"; | ||||||
|  |  | ||||||
| @@ -557,6 +566,7 @@ message ListEntitiesSensorResponse { | |||||||
| } | } | ||||||
| message SensorStateResponse { | message SensorStateResponse { | ||||||
|   option (id) = 25; |   option (id) = 25; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_SENSOR"; |   option (ifdef) = "USE_SENSOR"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -571,6 +581,7 @@ message SensorStateResponse { | |||||||
| // ==================== SWITCH ==================== | // ==================== SWITCH ==================== | ||||||
| message ListEntitiesSwitchResponse { | message ListEntitiesSwitchResponse { | ||||||
|   option (id) = 17; |   option (id) = 17; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_SWITCH"; |   option (ifdef) = "USE_SWITCH"; | ||||||
|  |  | ||||||
| @@ -587,6 +598,7 @@ message ListEntitiesSwitchResponse { | |||||||
| } | } | ||||||
| message SwitchStateResponse { | message SwitchStateResponse { | ||||||
|   option (id) = 26; |   option (id) = 26; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_SWITCH"; |   option (ifdef) = "USE_SWITCH"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -607,6 +619,7 @@ message SwitchCommandRequest { | |||||||
| // ==================== TEXT SENSOR ==================== | // ==================== TEXT SENSOR ==================== | ||||||
| message ListEntitiesTextSensorResponse { | message ListEntitiesTextSensorResponse { | ||||||
|   option (id) = 18; |   option (id) = 18; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_TEXT_SENSOR"; |   option (ifdef) = "USE_TEXT_SENSOR"; | ||||||
|  |  | ||||||
| @@ -622,6 +635,7 @@ message ListEntitiesTextSensorResponse { | |||||||
| } | } | ||||||
| message TextSensorStateResponse { | message TextSensorStateResponse { | ||||||
|   option (id) = 27; |   option (id) = 27; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_TEXT_SENSOR"; |   option (ifdef) = "USE_TEXT_SENSOR"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -789,6 +803,7 @@ message ExecuteServiceRequest { | |||||||
| // ==================== CAMERA ==================== | // ==================== CAMERA ==================== | ||||||
| message ListEntitiesCameraResponse { | message ListEntitiesCameraResponse { | ||||||
|   option (id) = 43; |   option (id) = 43; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_ESP32_CAMERA"; |   option (ifdef) = "USE_ESP32_CAMERA"; | ||||||
|  |  | ||||||
| @@ -869,6 +884,7 @@ enum ClimatePreset { | |||||||
| } | } | ||||||
| message ListEntitiesClimateResponse { | message ListEntitiesClimateResponse { | ||||||
|   option (id) = 46; |   option (id) = 46; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_CLIMATE"; |   option (ifdef) = "USE_CLIMATE"; | ||||||
|  |  | ||||||
| @@ -903,6 +919,7 @@ message ListEntitiesClimateResponse { | |||||||
| } | } | ||||||
| message ClimateStateResponse { | message ClimateStateResponse { | ||||||
|   option (id) = 47; |   option (id) = 47; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_CLIMATE"; |   option (ifdef) = "USE_CLIMATE"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -964,6 +981,7 @@ enum NumberMode { | |||||||
| } | } | ||||||
| message ListEntitiesNumberResponse { | message ListEntitiesNumberResponse { | ||||||
|   option (id) = 49; |   option (id) = 49; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_NUMBER"; |   option (ifdef) = "USE_NUMBER"; | ||||||
|  |  | ||||||
| @@ -984,6 +1002,7 @@ message ListEntitiesNumberResponse { | |||||||
| } | } | ||||||
| message NumberStateResponse { | message NumberStateResponse { | ||||||
|   option (id) = 50; |   option (id) = 50; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_NUMBER"; |   option (ifdef) = "USE_NUMBER"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -1007,6 +1026,7 @@ message NumberCommandRequest { | |||||||
| // ==================== SELECT ==================== | // ==================== SELECT ==================== | ||||||
| message ListEntitiesSelectResponse { | message ListEntitiesSelectResponse { | ||||||
|   option (id) = 52; |   option (id) = 52; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_SELECT"; |   option (ifdef) = "USE_SELECT"; | ||||||
|  |  | ||||||
| @@ -1022,6 +1042,7 @@ message ListEntitiesSelectResponse { | |||||||
| } | } | ||||||
| message SelectStateResponse { | message SelectStateResponse { | ||||||
|   option (id) = 53; |   option (id) = 53; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_SELECT"; |   option (ifdef) = "USE_SELECT"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -1045,6 +1066,7 @@ message SelectCommandRequest { | |||||||
| // ==================== SIREN ==================== | // ==================== SIREN ==================== | ||||||
| message ListEntitiesSirenResponse { | message ListEntitiesSirenResponse { | ||||||
|   option (id) = 55; |   option (id) = 55; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_SIREN"; |   option (ifdef) = "USE_SIREN"; | ||||||
|  |  | ||||||
| @@ -1062,6 +1084,7 @@ message ListEntitiesSirenResponse { | |||||||
| } | } | ||||||
| message SirenStateResponse { | message SirenStateResponse { | ||||||
|   option (id) = 56; |   option (id) = 56; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_SIREN"; |   option (ifdef) = "USE_SIREN"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -1102,6 +1125,7 @@ enum LockCommand  { | |||||||
| } | } | ||||||
| message ListEntitiesLockResponse { | message ListEntitiesLockResponse { | ||||||
|   option (id) = 58; |   option (id) = 58; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_LOCK"; |   option (ifdef) = "USE_LOCK"; | ||||||
|  |  | ||||||
| @@ -1123,6 +1147,7 @@ message ListEntitiesLockResponse { | |||||||
| } | } | ||||||
| message LockStateResponse { | message LockStateResponse { | ||||||
|   option (id) = 59; |   option (id) = 59; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_LOCK"; |   option (ifdef) = "USE_LOCK"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -1145,6 +1170,7 @@ message LockCommandRequest { | |||||||
| // ==================== BUTTON ==================== | // ==================== BUTTON ==================== | ||||||
| message ListEntitiesButtonResponse { | message ListEntitiesButtonResponse { | ||||||
|   option (id) = 61; |   option (id) = 61; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_BUTTON"; |   option (ifdef) = "USE_BUTTON"; | ||||||
|  |  | ||||||
| @@ -1196,6 +1222,7 @@ message MediaPlayerSupportedFormat { | |||||||
| } | } | ||||||
| message ListEntitiesMediaPlayerResponse { | message ListEntitiesMediaPlayerResponse { | ||||||
|   option (id) = 63; |   option (id) = 63; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_MEDIA_PLAYER"; |   option (ifdef) = "USE_MEDIA_PLAYER"; | ||||||
|  |  | ||||||
| @@ -1214,6 +1241,7 @@ message ListEntitiesMediaPlayerResponse { | |||||||
| } | } | ||||||
| message MediaPlayerStateResponse { | message MediaPlayerStateResponse { | ||||||
|   option (id) = 64; |   option (id) = 64; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_MEDIA_PLAYER"; |   option (ifdef) = "USE_MEDIA_PLAYER"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -1735,6 +1763,7 @@ enum AlarmControlPanelStateCommand { | |||||||
|  |  | ||||||
| message ListEntitiesAlarmControlPanelResponse { | message ListEntitiesAlarmControlPanelResponse { | ||||||
|   option (id) = 94; |   option (id) = 94; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_ALARM_CONTROL_PANEL"; |   option (ifdef) = "USE_ALARM_CONTROL_PANEL"; | ||||||
|  |  | ||||||
| @@ -1752,6 +1781,7 @@ message ListEntitiesAlarmControlPanelResponse { | |||||||
|  |  | ||||||
| message AlarmControlPanelStateResponse { | message AlarmControlPanelStateResponse { | ||||||
|   option (id) = 95; |   option (id) = 95; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_ALARM_CONTROL_PANEL"; |   option (ifdef) = "USE_ALARM_CONTROL_PANEL"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -1776,6 +1806,7 @@ enum TextMode { | |||||||
| } | } | ||||||
| message ListEntitiesTextResponse { | message ListEntitiesTextResponse { | ||||||
|   option (id) = 97; |   option (id) = 97; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_TEXT"; |   option (ifdef) = "USE_TEXT"; | ||||||
|  |  | ||||||
| @@ -1794,6 +1825,7 @@ message ListEntitiesTextResponse { | |||||||
| } | } | ||||||
| message TextStateResponse { | message TextStateResponse { | ||||||
|   option (id) = 98; |   option (id) = 98; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_TEXT"; |   option (ifdef) = "USE_TEXT"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -1818,6 +1850,7 @@ message TextCommandRequest { | |||||||
| // ==================== DATETIME DATE ==================== | // ==================== DATETIME DATE ==================== | ||||||
| message ListEntitiesDateResponse { | message ListEntitiesDateResponse { | ||||||
|   option (id) = 100; |   option (id) = 100; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_DATETIME_DATE"; |   option (ifdef) = "USE_DATETIME_DATE"; | ||||||
|  |  | ||||||
| @@ -1832,6 +1865,7 @@ message ListEntitiesDateResponse { | |||||||
| } | } | ||||||
| message DateStateResponse { | message DateStateResponse { | ||||||
|   option (id) = 101; |   option (id) = 101; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_DATETIME_DATE"; |   option (ifdef) = "USE_DATETIME_DATE"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -1859,6 +1893,7 @@ message DateCommandRequest { | |||||||
| // ==================== DATETIME TIME ==================== | // ==================== DATETIME TIME ==================== | ||||||
| message ListEntitiesTimeResponse { | message ListEntitiesTimeResponse { | ||||||
|   option (id) = 103; |   option (id) = 103; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_DATETIME_TIME"; |   option (ifdef) = "USE_DATETIME_TIME"; | ||||||
|  |  | ||||||
| @@ -1873,6 +1908,7 @@ message ListEntitiesTimeResponse { | |||||||
| } | } | ||||||
| message TimeStateResponse { | message TimeStateResponse { | ||||||
|   option (id) = 104; |   option (id) = 104; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_DATETIME_TIME"; |   option (ifdef) = "USE_DATETIME_TIME"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -1900,6 +1936,7 @@ message TimeCommandRequest { | |||||||
| // ==================== EVENT ==================== | // ==================== EVENT ==================== | ||||||
| message ListEntitiesEventResponse { | message ListEntitiesEventResponse { | ||||||
|   option (id) = 107; |   option (id) = 107; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_EVENT"; |   option (ifdef) = "USE_EVENT"; | ||||||
|  |  | ||||||
| @@ -1917,6 +1954,7 @@ message ListEntitiesEventResponse { | |||||||
| } | } | ||||||
| message EventResponse { | message EventResponse { | ||||||
|   option (id) = 108; |   option (id) = 108; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_EVENT"; |   option (ifdef) = "USE_EVENT"; | ||||||
|  |  | ||||||
| @@ -1927,6 +1965,7 @@ message EventResponse { | |||||||
| // ==================== VALVE ==================== | // ==================== VALVE ==================== | ||||||
| message ListEntitiesValveResponse { | message ListEntitiesValveResponse { | ||||||
|   option (id) = 109; |   option (id) = 109; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_VALVE"; |   option (ifdef) = "USE_VALVE"; | ||||||
|  |  | ||||||
| @@ -1952,6 +1991,7 @@ enum ValveOperation { | |||||||
| } | } | ||||||
| message ValveStateResponse { | message ValveStateResponse { | ||||||
|   option (id) = 110; |   option (id) = 110; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_VALVE"; |   option (ifdef) = "USE_VALVE"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -1976,6 +2016,7 @@ message ValveCommandRequest { | |||||||
| // ==================== DATETIME DATETIME ==================== | // ==================== DATETIME DATETIME ==================== | ||||||
| message ListEntitiesDateTimeResponse { | message ListEntitiesDateTimeResponse { | ||||||
|   option (id) = 112; |   option (id) = 112; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_DATETIME_DATETIME"; |   option (ifdef) = "USE_DATETIME_DATETIME"; | ||||||
|  |  | ||||||
| @@ -1990,6 +2031,7 @@ message ListEntitiesDateTimeResponse { | |||||||
| } | } | ||||||
| message DateTimeStateResponse { | message DateTimeStateResponse { | ||||||
|   option (id) = 113; |   option (id) = 113; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_DATETIME_DATETIME"; |   option (ifdef) = "USE_DATETIME_DATETIME"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
| @@ -2013,6 +2055,7 @@ message DateTimeCommandRequest { | |||||||
| // ==================== UPDATE ==================== | // ==================== UPDATE ==================== | ||||||
| message ListEntitiesUpdateResponse { | message ListEntitiesUpdateResponse { | ||||||
|   option (id) = 116; |   option (id) = 116; | ||||||
|  |   option (base_class) = "InfoResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_UPDATE"; |   option (ifdef) = "USE_UPDATE"; | ||||||
|  |  | ||||||
| @@ -2028,6 +2071,7 @@ message ListEntitiesUpdateResponse { | |||||||
| } | } | ||||||
| message UpdateStateResponse { | message UpdateStateResponse { | ||||||
|   option (id) = 117; |   option (id) = 117; | ||||||
|  |   option (base_class) = "StateResponseProtoMessage"; | ||||||
|   option (source) = SOURCE_SERVER; |   option (source) = SOURCE_SERVER; | ||||||
|   option (ifdef) = "USE_UPDATE"; |   option (ifdef) = "USE_UPDATE"; | ||||||
|   option (no_delay) = true; |   option (no_delay) = true; | ||||||
|   | |||||||
| @@ -301,7 +301,7 @@ uint16_t APIConnection::try_send_binary_sensor_state(EntityBase *entity, APIConn | |||||||
|   BinarySensorStateResponse resp; |   BinarySensorStateResponse resp; | ||||||
|   resp.state = binary_sensor->state; |   resp.state = binary_sensor->state; | ||||||
|   resp.missing_state = !binary_sensor->has_state(); |   resp.missing_state = !binary_sensor->has_state(); | ||||||
|   resp.key = binary_sensor->get_object_id_hash(); |   fill_entity_state_base(binary_sensor, resp); | ||||||
|   return encode_message_to_buffer(resp, BinarySensorStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, BinarySensorStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -335,7 +335,7 @@ uint16_t APIConnection::try_send_cover_state(EntityBase *entity, APIConnection * | |||||||
|   if (traits.get_supports_tilt()) |   if (traits.get_supports_tilt()) | ||||||
|     msg.tilt = cover->tilt; |     msg.tilt = cover->tilt; | ||||||
|   msg.current_operation = static_cast<enums::CoverOperation>(cover->current_operation); |   msg.current_operation = static_cast<enums::CoverOperation>(cover->current_operation); | ||||||
|   msg.key = cover->get_object_id_hash(); |   fill_entity_state_base(cover, msg); | ||||||
|   return encode_message_to_buffer(msg, CoverStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(msg, CoverStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
| uint16_t APIConnection::try_send_cover_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_cover_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
| @@ -403,7 +403,7 @@ uint16_t APIConnection::try_send_fan_state(EntityBase *entity, APIConnection *co | |||||||
|     msg.direction = static_cast<enums::FanDirection>(fan->direction); |     msg.direction = static_cast<enums::FanDirection>(fan->direction); | ||||||
|   if (traits.supports_preset_modes()) |   if (traits.supports_preset_modes()) | ||||||
|     msg.preset_mode = fan->preset_mode; |     msg.preset_mode = fan->preset_mode; | ||||||
|   msg.key = fan->get_object_id_hash(); |   fill_entity_state_base(fan, msg); | ||||||
|   return encode_message_to_buffer(msg, FanStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(msg, FanStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
| uint16_t APIConnection::try_send_fan_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_fan_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
| @@ -470,7 +470,7 @@ uint16_t APIConnection::try_send_light_state(EntityBase *entity, APIConnection * | |||||||
|   resp.warm_white = values.get_warm_white(); |   resp.warm_white = values.get_warm_white(); | ||||||
|   if (light->supports_effects()) |   if (light->supports_effects()) | ||||||
|     resp.effect = light->get_effect_name(); |     resp.effect = light->get_effect_name(); | ||||||
|   resp.key = light->get_object_id_hash(); |   fill_entity_state_base(light, resp); | ||||||
|   return encode_message_to_buffer(resp, LightStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, LightStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
| uint16_t APIConnection::try_send_light_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_light_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
| @@ -552,7 +552,7 @@ uint16_t APIConnection::try_send_sensor_state(EntityBase *entity, APIConnection | |||||||
|   SensorStateResponse resp; |   SensorStateResponse resp; | ||||||
|   resp.state = sensor->state; |   resp.state = sensor->state; | ||||||
|   resp.missing_state = !sensor->has_state(); |   resp.missing_state = !sensor->has_state(); | ||||||
|   resp.key = sensor->get_object_id_hash(); |   fill_entity_state_base(sensor, resp); | ||||||
|   return encode_message_to_buffer(resp, SensorStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, SensorStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -586,7 +586,7 @@ uint16_t APIConnection::try_send_switch_state(EntityBase *entity, APIConnection | |||||||
|   auto *a_switch = static_cast<switch_::Switch *>(entity); |   auto *a_switch = static_cast<switch_::Switch *>(entity); | ||||||
|   SwitchStateResponse resp; |   SwitchStateResponse resp; | ||||||
|   resp.state = a_switch->state; |   resp.state = a_switch->state; | ||||||
|   resp.key = a_switch->get_object_id_hash(); |   fill_entity_state_base(a_switch, resp); | ||||||
|   return encode_message_to_buffer(resp, SwitchStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, SwitchStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -629,7 +629,7 @@ uint16_t APIConnection::try_send_text_sensor_state(EntityBase *entity, APIConnec | |||||||
|   TextSensorStateResponse resp; |   TextSensorStateResponse resp; | ||||||
|   resp.state = text_sensor->state; |   resp.state = text_sensor->state; | ||||||
|   resp.missing_state = !text_sensor->has_state(); |   resp.missing_state = !text_sensor->has_state(); | ||||||
|   resp.key = text_sensor->get_object_id_hash(); |   fill_entity_state_base(text_sensor, resp); | ||||||
|   return encode_message_to_buffer(resp, TextSensorStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, TextSensorStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
| uint16_t APIConnection::try_send_text_sensor_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | uint16_t APIConnection::try_send_text_sensor_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, | ||||||
| @@ -653,7 +653,7 @@ uint16_t APIConnection::try_send_climate_state(EntityBase *entity, APIConnection | |||||||
|                                                bool is_single) { |                                                bool is_single) { | ||||||
|   auto *climate = static_cast<climate::Climate *>(entity); |   auto *climate = static_cast<climate::Climate *>(entity); | ||||||
|   ClimateStateResponse resp; |   ClimateStateResponse resp; | ||||||
|   resp.key = climate->get_object_id_hash(); |   fill_entity_state_base(climate, resp); | ||||||
|   auto traits = climate->get_traits(); |   auto traits = climate->get_traits(); | ||||||
|   resp.mode = static_cast<enums::ClimateMode>(climate->mode); |   resp.mode = static_cast<enums::ClimateMode>(climate->mode); | ||||||
|   resp.action = static_cast<enums::ClimateAction>(climate->action); |   resp.action = static_cast<enums::ClimateAction>(climate->action); | ||||||
| @@ -762,7 +762,7 @@ uint16_t APIConnection::try_send_number_state(EntityBase *entity, APIConnection | |||||||
|   NumberStateResponse resp; |   NumberStateResponse resp; | ||||||
|   resp.state = number->state; |   resp.state = number->state; | ||||||
|   resp.missing_state = !number->has_state(); |   resp.missing_state = !number->has_state(); | ||||||
|   resp.key = number->get_object_id_hash(); |   fill_entity_state_base(number, resp); | ||||||
|   return encode_message_to_buffer(resp, NumberStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, NumberStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -803,7 +803,7 @@ uint16_t APIConnection::try_send_date_state(EntityBase *entity, APIConnection *c | |||||||
|   resp.year = date->year; |   resp.year = date->year; | ||||||
|   resp.month = date->month; |   resp.month = date->month; | ||||||
|   resp.day = date->day; |   resp.day = date->day; | ||||||
|   resp.key = date->get_object_id_hash(); |   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) { | void APIConnection::send_date_info(datetime::DateEntity *date) { | ||||||
| @@ -840,7 +840,7 @@ uint16_t APIConnection::try_send_time_state(EntityBase *entity, APIConnection *c | |||||||
|   resp.hour = time->hour; |   resp.hour = time->hour; | ||||||
|   resp.minute = time->minute; |   resp.minute = time->minute; | ||||||
|   resp.second = time->second; |   resp.second = time->second; | ||||||
|   resp.key = time->get_object_id_hash(); |   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) { | void APIConnection::send_time_info(datetime::TimeEntity *time) { | ||||||
| @@ -879,7 +879,7 @@ uint16_t APIConnection::try_send_datetime_state(EntityBase *entity, APIConnectio | |||||||
|     ESPTime state = datetime->state_as_esptime(); |     ESPTime state = datetime->state_as_esptime(); | ||||||
|     resp.epoch_seconds = state.timestamp; |     resp.epoch_seconds = state.timestamp; | ||||||
|   } |   } | ||||||
|   resp.key = datetime->get_object_id_hash(); |   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) { | void APIConnection::send_datetime_info(datetime::DateTimeEntity *datetime) { | ||||||
| @@ -918,7 +918,7 @@ uint16_t APIConnection::try_send_text_state(EntityBase *entity, APIConnection *c | |||||||
|   TextStateResponse resp; |   TextStateResponse resp; | ||||||
|   resp.state = text->state; |   resp.state = text->state; | ||||||
|   resp.missing_state = !text->has_state(); |   resp.missing_state = !text->has_state(); | ||||||
|   resp.key = text->get_object_id_hash(); |   fill_entity_state_base(text, resp); | ||||||
|   return encode_message_to_buffer(resp, TextStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, TextStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -959,7 +959,7 @@ uint16_t APIConnection::try_send_select_state(EntityBase *entity, APIConnection | |||||||
|   SelectStateResponse resp; |   SelectStateResponse resp; | ||||||
|   resp.state = select->state; |   resp.state = select->state; | ||||||
|   resp.missing_state = !select->has_state(); |   resp.missing_state = !select->has_state(); | ||||||
|   resp.key = select->get_object_id_hash(); |   fill_entity_state_base(select, resp); | ||||||
|   return encode_message_to_buffer(resp, SelectStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, SelectStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1019,7 +1019,7 @@ uint16_t APIConnection::try_send_lock_state(EntityBase *entity, APIConnection *c | |||||||
|   auto *a_lock = static_cast<lock::Lock *>(entity); |   auto *a_lock = static_cast<lock::Lock *>(entity); | ||||||
|   LockStateResponse resp; |   LockStateResponse resp; | ||||||
|   resp.state = static_cast<enums::LockState>(a_lock->state); |   resp.state = static_cast<enums::LockState>(a_lock->state); | ||||||
|   resp.key = a_lock->get_object_id_hash(); |   fill_entity_state_base(a_lock, resp); | ||||||
|   return encode_message_to_buffer(resp, LockStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, LockStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1063,7 +1063,7 @@ uint16_t APIConnection::try_send_valve_state(EntityBase *entity, APIConnection * | |||||||
|   ValveStateResponse resp; |   ValveStateResponse resp; | ||||||
|   resp.position = valve->position; |   resp.position = valve->position; | ||||||
|   resp.current_operation = static_cast<enums::ValveOperation>(valve->current_operation); |   resp.current_operation = static_cast<enums::ValveOperation>(valve->current_operation); | ||||||
|   resp.key = valve->get_object_id_hash(); |   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) { | void APIConnection::send_valve_info(valve::Valve *valve) { | ||||||
| @@ -1111,7 +1111,7 @@ uint16_t APIConnection::try_send_media_player_state(EntityBase *entity, APIConne | |||||||
|   resp.state = static_cast<enums::MediaPlayerState>(report_state); |   resp.state = static_cast<enums::MediaPlayerState>(report_state); | ||||||
|   resp.volume = media_player->volume; |   resp.volume = media_player->volume; | ||||||
|   resp.muted = media_player->is_muted(); |   resp.muted = media_player->is_muted(); | ||||||
|   resp.key = media_player->get_object_id_hash(); |   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) { | void APIConnection::send_media_player_info(media_player::MediaPlayer *media_player) { | ||||||
| @@ -1375,7 +1375,7 @@ uint16_t APIConnection::try_send_alarm_control_panel_state(EntityBase *entity, A | |||||||
|   auto *a_alarm_control_panel = static_cast<alarm_control_panel::AlarmControlPanel *>(entity); |   auto *a_alarm_control_panel = static_cast<alarm_control_panel::AlarmControlPanel *>(entity); | ||||||
|   AlarmControlPanelStateResponse resp; |   AlarmControlPanelStateResponse resp; | ||||||
|   resp.state = static_cast<enums::AlarmControlPanelState>(a_alarm_control_panel->get_state()); |   resp.state = static_cast<enums::AlarmControlPanelState>(a_alarm_control_panel->get_state()); | ||||||
|   resp.key = a_alarm_control_panel->get_object_id_hash(); |   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) { | void APIConnection::send_alarm_control_panel_info(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) { | ||||||
| @@ -1439,7 +1439,7 @@ uint16_t APIConnection::try_send_event_response(event::Event *event, const std:: | |||||||
|                                                 uint32_t remaining_size, bool is_single) { |                                                 uint32_t remaining_size, bool is_single) { | ||||||
|   EventResponse resp; |   EventResponse resp; | ||||||
|   resp.event_type = event_type; |   resp.event_type = event_type; | ||||||
|   resp.key = event->get_object_id_hash(); |   fill_entity_state_base(event, resp); | ||||||
|   return encode_message_to_buffer(resp, EventResponse::MESSAGE_TYPE, conn, remaining_size, is_single); |   return encode_message_to_buffer(resp, EventResponse::MESSAGE_TYPE, conn, remaining_size, is_single); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1477,7 +1477,7 @@ uint16_t APIConnection::try_send_update_state(EntityBase *entity, APIConnection | |||||||
|     resp.release_summary = update->update_info.summary; |     resp.release_summary = update->update_info.summary; | ||||||
|     resp.release_url = update->update_info.release_url; |     resp.release_url = update->update_info.release_url; | ||||||
|   } |   } | ||||||
|   resp.key = update->get_object_id_hash(); |   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) { | void APIConnection::send_update_info(update::UpdateEntity *update) { | ||||||
| @@ -1538,7 +1538,7 @@ bool APIConnection::try_send_log_message(int level, const char *tag, const char | |||||||
|   buffer.encode_string(3, line, line_length);             // string message = 3 |   buffer.encode_string(3, line, line_length);             // string message = 3 | ||||||
|  |  | ||||||
|   // SubscribeLogsResponse - 29 |   // SubscribeLogsResponse - 29 | ||||||
|   return this->send_buffer(buffer, 29); |   return this->send_buffer(buffer, SubscribeLogsResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
|  |  | ||||||
| HelloResponse APIConnection::hello(const HelloRequest &msg) { | HelloResponse APIConnection::hello(const HelloRequest &msg) { | ||||||
| @@ -1685,7 +1685,7 @@ bool APIConnection::try_to_clear_buffer(bool log_out_of_space) { | |||||||
|   return false; |   return false; | ||||||
| } | } | ||||||
| bool APIConnection::send_buffer(ProtoWriteBuffer buffer, uint16_t message_type) { | bool APIConnection::send_buffer(ProtoWriteBuffer buffer, uint16_t message_type) { | ||||||
|   if (!this->try_to_clear_buffer(message_type != 29)) {  // SubscribeLogsResponse |   if (!this->try_to_clear_buffer(message_type != SubscribeLogsResponse::MESSAGE_TYPE)) {  // SubscribeLogsResponse | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -282,8 +282,8 @@ class APIConnection : public APIServerConnection { | |||||||
|   ProtoWriteBuffer allocate_batch_message_buffer(uint16_t size); |   ProtoWriteBuffer allocate_batch_message_buffer(uint16_t size); | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   // Helper function to fill common entity fields |   // Helper function to fill common entity info fields | ||||||
|   template<typename ResponseT> static void fill_entity_info_base(esphome::EntityBase *entity, ResponseT &response) { |   static void fill_entity_info_base(esphome::EntityBase *entity, InfoResponseProtoMessage &response) { | ||||||
|     // Set common fields that are shared by all entity types |     // Set common fields that are shared by all entity types | ||||||
|     response.key = entity->get_object_id_hash(); |     response.key = entity->get_object_id_hash(); | ||||||
|     response.object_id = entity->get_object_id(); |     response.object_id = entity->get_object_id(); | ||||||
| @@ -297,6 +297,11 @@ class APIConnection : public APIServerConnection { | |||||||
|     response.entity_category = static_cast<enums::EntityCategory>(entity->get_entity_category()); |     response.entity_category = static_cast<enums::EntityCategory>(entity->get_entity_category()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   // Helper function to fill common entity state fields | ||||||
|  |   static void fill_entity_state_base(esphome::EntityBase *entity, StateResponseProtoMessage &response) { | ||||||
|  |     response.key = entity->get_object_id_hash(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   // Non-template helper to encode any ProtoMessage |   // Non-template helper to encode any ProtoMessage | ||||||
|   static uint16_t encode_message_to_buffer(ProtoMessage &msg, uint16_t message_type, APIConnection *conn, |   static uint16_t encode_message_to_buffer(ProtoMessage &msg, uint16_t message_type, APIConnection *conn, | ||||||
|                                            uint32_t remaining_size, bool is_single); |                                            uint32_t remaining_size, bool is_single); | ||||||
|   | |||||||
| @@ -21,4 +21,5 @@ extend google.protobuf.MessageOptions { | |||||||
|     optional string ifdef = 1038; |     optional string ifdef = 1038; | ||||||
|     optional bool log = 1039 [default=true]; |     optional bool log = 1039 [default=true]; | ||||||
|     optional bool no_delay = 1040 [default=false]; |     optional bool no_delay = 1040 [default=false]; | ||||||
|  |     optional string base_class = 1041; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -628,6 +628,7 @@ template<> const char *proto_enum_to_string<enums::UpdateCommand>(enums::UpdateC | |||||||
|   } |   } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| bool HelloRequest::decode_varint(uint32_t field_id, ProtoVarInt value) { | bool HelloRequest::decode_varint(uint32_t field_id, ProtoVarInt value) { | ||||||
|   switch (field_id) { |   switch (field_id) { | ||||||
|     case 2: { |     case 2: { | ||||||
|   | |||||||
| @@ -253,6 +253,27 @@ enum UpdateCommand : uint32_t { | |||||||
|  |  | ||||||
| }  // namespace enums | }  // namespace enums | ||||||
|  |  | ||||||
|  | class InfoResponseProtoMessage : public ProtoMessage { | ||||||
|  |  public: | ||||||
|  |   virtual ~InfoResponseProtoMessage() = default; | ||||||
|  |   std::string object_id{}; | ||||||
|  |   uint32_t key{0}; | ||||||
|  |   std::string name{}; | ||||||
|  |   std::string unique_id{}; | ||||||
|  |   bool disabled_by_default{false}; | ||||||
|  |   std::string icon{}; | ||||||
|  |   enums::EntityCategory entity_category{}; | ||||||
|  |  | ||||||
|  |  protected: | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | class StateResponseProtoMessage : public ProtoMessage { | ||||||
|  |  public: | ||||||
|  |   virtual ~StateResponseProtoMessage() = default; | ||||||
|  |   uint32_t key{0}; | ||||||
|  |  | ||||||
|  |  protected: | ||||||
|  | }; | ||||||
| class HelloRequest : public ProtoMessage { | class HelloRequest : public ProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 1; |   static constexpr uint16_t MESSAGE_TYPE = 1; | ||||||
| @@ -484,22 +505,15 @@ class SubscribeStatesRequest : public ProtoMessage { | |||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
| }; | }; | ||||||
| class ListEntitiesBinarySensorResponse : public ProtoMessage { | class ListEntitiesBinarySensorResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 12; |   static constexpr uint16_t MESSAGE_TYPE = 12; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 56; |   static constexpr uint16_t ESTIMATED_SIZE = 56; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_binary_sensor_response"; } |   static constexpr const char *message_name() { return "list_entities_binary_sensor_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string device_class{}; |   std::string device_class{}; | ||||||
|   bool is_status_binary_sensor{false}; |   bool is_status_binary_sensor{false}; | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
| @@ -511,14 +525,13 @@ class ListEntitiesBinarySensorResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class BinarySensorStateResponse : public ProtoMessage { | class BinarySensorStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 21; |   static constexpr uint16_t MESSAGE_TYPE = 21; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 9; |   static constexpr uint16_t ESTIMATED_SIZE = 9; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "binary_sensor_state_response"; } |   static constexpr const char *message_name() { return "binary_sensor_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   bool state{false}; |   bool state{false}; | ||||||
|   bool missing_state{false}; |   bool missing_state{false}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
| @@ -531,24 +544,17 @@ class BinarySensorStateResponse : public ProtoMessage { | |||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesCoverResponse : public ProtoMessage { | class ListEntitiesCoverResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 13; |   static constexpr uint16_t MESSAGE_TYPE = 13; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 62; |   static constexpr uint16_t ESTIMATED_SIZE = 62; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_cover_response"; } |   static constexpr const char *message_name() { return "list_entities_cover_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   bool assumed_state{false}; |   bool assumed_state{false}; | ||||||
|   bool supports_position{false}; |   bool supports_position{false}; | ||||||
|   bool supports_tilt{false}; |   bool supports_tilt{false}; | ||||||
|   std::string device_class{}; |   std::string device_class{}; | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   bool supports_stop{false}; |   bool supports_stop{false}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| @@ -561,14 +567,13 @@ class ListEntitiesCoverResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class CoverStateResponse : public ProtoMessage { | class CoverStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 22; |   static constexpr uint16_t MESSAGE_TYPE = 22; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 19; |   static constexpr uint16_t ESTIMATED_SIZE = 19; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "cover_state_response"; } |   static constexpr const char *message_name() { return "cover_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   enums::LegacyCoverState legacy_state{}; |   enums::LegacyCoverState legacy_state{}; | ||||||
|   float position{0.0f}; |   float position{0.0f}; | ||||||
|   float tilt{0.0f}; |   float tilt{0.0f}; | ||||||
| @@ -608,24 +613,17 @@ class CoverCommandRequest : public ProtoMessage { | |||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesFanResponse : public ProtoMessage { | class ListEntitiesFanResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 14; |   static constexpr uint16_t MESSAGE_TYPE = 14; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 73; |   static constexpr uint16_t ESTIMATED_SIZE = 73; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_fan_response"; } |   static constexpr const char *message_name() { return "list_entities_fan_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   bool supports_oscillation{false}; |   bool supports_oscillation{false}; | ||||||
|   bool supports_speed{false}; |   bool supports_speed{false}; | ||||||
|   bool supports_direction{false}; |   bool supports_direction{false}; | ||||||
|   int32_t supported_speed_count{0}; |   int32_t supported_speed_count{0}; | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   std::vector<std::string> supported_preset_modes{}; |   std::vector<std::string> supported_preset_modes{}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| @@ -638,14 +636,13 @@ class ListEntitiesFanResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class FanStateResponse : public ProtoMessage { | class FanStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 23; |   static constexpr uint16_t MESSAGE_TYPE = 23; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 26; |   static constexpr uint16_t ESTIMATED_SIZE = 26; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "fan_state_response"; } |   static constexpr const char *message_name() { return "fan_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   bool state{false}; |   bool state{false}; | ||||||
|   bool oscillating{false}; |   bool oscillating{false}; | ||||||
|   enums::FanSpeed speed{}; |   enums::FanSpeed speed{}; | ||||||
| @@ -694,17 +691,13 @@ class FanCommandRequest : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesLightResponse : public ProtoMessage { | class ListEntitiesLightResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 15; |   static constexpr uint16_t MESSAGE_TYPE = 15; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 85; |   static constexpr uint16_t ESTIMATED_SIZE = 85; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_light_response"; } |   static constexpr const char *message_name() { return "list_entities_light_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::vector<enums::ColorMode> supported_color_modes{}; |   std::vector<enums::ColorMode> supported_color_modes{}; | ||||||
|   bool legacy_supports_brightness{false}; |   bool legacy_supports_brightness{false}; | ||||||
|   bool legacy_supports_rgb{false}; |   bool legacy_supports_rgb{false}; | ||||||
| @@ -713,9 +706,6 @@ class ListEntitiesLightResponse : public ProtoMessage { | |||||||
|   float min_mireds{0.0f}; |   float min_mireds{0.0f}; | ||||||
|   float max_mireds{0.0f}; |   float max_mireds{0.0f}; | ||||||
|   std::vector<std::string> effects{}; |   std::vector<std::string> effects{}; | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
| @@ -727,14 +717,13 @@ class ListEntitiesLightResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class LightStateResponse : public ProtoMessage { | class LightStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 24; |   static constexpr uint16_t MESSAGE_TYPE = 24; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 63; |   static constexpr uint16_t ESTIMATED_SIZE = 63; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "light_state_response"; } |   static constexpr const char *message_name() { return "light_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   bool state{false}; |   bool state{false}; | ||||||
|   float brightness{0.0f}; |   float brightness{0.0f}; | ||||||
|   enums::ColorMode color_mode{}; |   enums::ColorMode color_mode{}; | ||||||
| @@ -803,26 +792,19 @@ class LightCommandRequest : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesSensorResponse : public ProtoMessage { | class ListEntitiesSensorResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 16; |   static constexpr uint16_t MESSAGE_TYPE = 16; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 73; |   static constexpr uint16_t ESTIMATED_SIZE = 73; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_sensor_response"; } |   static constexpr const char *message_name() { return "list_entities_sensor_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   std::string unit_of_measurement{}; |   std::string unit_of_measurement{}; | ||||||
|   int32_t accuracy_decimals{0}; |   int32_t accuracy_decimals{0}; | ||||||
|   bool force_update{false}; |   bool force_update{false}; | ||||||
|   std::string device_class{}; |   std::string device_class{}; | ||||||
|   enums::SensorStateClass state_class{}; |   enums::SensorStateClass state_class{}; | ||||||
|   enums::SensorLastResetType legacy_last_reset_type{}; |   enums::SensorLastResetType legacy_last_reset_type{}; | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
| @@ -834,14 +816,13 @@ class ListEntitiesSensorResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class SensorStateResponse : public ProtoMessage { | class SensorStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 25; |   static constexpr uint16_t MESSAGE_TYPE = 25; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 12; |   static constexpr uint16_t ESTIMATED_SIZE = 12; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "sensor_state_response"; } |   static constexpr const char *message_name() { return "sensor_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   float state{0.0f}; |   float state{0.0f}; | ||||||
|   bool missing_state{false}; |   bool missing_state{false}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
| @@ -854,21 +835,14 @@ class SensorStateResponse : public ProtoMessage { | |||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesSwitchResponse : public ProtoMessage { | class ListEntitiesSwitchResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 17; |   static constexpr uint16_t MESSAGE_TYPE = 17; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 56; |   static constexpr uint16_t ESTIMATED_SIZE = 56; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_switch_response"; } |   static constexpr const char *message_name() { return "list_entities_switch_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool assumed_state{false}; |   bool assumed_state{false}; | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   std::string device_class{}; |   std::string device_class{}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| @@ -881,14 +855,13 @@ class ListEntitiesSwitchResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class SwitchStateResponse : public ProtoMessage { | class SwitchStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 26; |   static constexpr uint16_t MESSAGE_TYPE = 26; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 7; |   static constexpr uint16_t ESTIMATED_SIZE = 7; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "switch_state_response"; } |   static constexpr const char *message_name() { return "switch_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   bool state{false}; |   bool state{false}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| @@ -919,20 +892,13 @@ class SwitchCommandRequest : public ProtoMessage { | |||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesTextSensorResponse : public ProtoMessage { | class ListEntitiesTextSensorResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 18; |   static constexpr uint16_t MESSAGE_TYPE = 18; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 54; |   static constexpr uint16_t ESTIMATED_SIZE = 54; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_text_sensor_response"; } |   static constexpr const char *message_name() { return "list_entities_text_sensor_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   std::string device_class{}; |   std::string device_class{}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| @@ -945,14 +911,13 @@ class ListEntitiesTextSensorResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class TextSensorStateResponse : public ProtoMessage { | class TextSensorStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 27; |   static constexpr uint16_t MESSAGE_TYPE = 27; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 16; |   static constexpr uint16_t ESTIMATED_SIZE = 16; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "text_sensor_state_response"; } |   static constexpr const char *message_name() { return "text_sensor_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string state{}; |   std::string state{}; | ||||||
|   bool missing_state{false}; |   bool missing_state{false}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
| @@ -1249,20 +1214,13 @@ class ExecuteServiceRequest : public ProtoMessage { | |||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesCameraResponse : public ProtoMessage { | class ListEntitiesCameraResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 43; |   static constexpr uint16_t MESSAGE_TYPE = 43; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 45; |   static constexpr uint16_t ESTIMATED_SIZE = 45; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_camera_response"; } |   static constexpr const char *message_name() { return "list_entities_camera_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
| @@ -1313,17 +1271,13 @@ class CameraImageRequest : public ProtoMessage { | |||||||
|  protected: |  protected: | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesClimateResponse : public ProtoMessage { | class ListEntitiesClimateResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 46; |   static constexpr uint16_t MESSAGE_TYPE = 46; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 151; |   static constexpr uint16_t ESTIMATED_SIZE = 151; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_climate_response"; } |   static constexpr const char *message_name() { return "list_entities_climate_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   bool supports_current_temperature{false}; |   bool supports_current_temperature{false}; | ||||||
|   bool supports_two_point_target_temperature{false}; |   bool supports_two_point_target_temperature{false}; | ||||||
|   std::vector<enums::ClimateMode> supported_modes{}; |   std::vector<enums::ClimateMode> supported_modes{}; | ||||||
| @@ -1337,9 +1291,6 @@ class ListEntitiesClimateResponse : public ProtoMessage { | |||||||
|   std::vector<std::string> supported_custom_fan_modes{}; |   std::vector<std::string> supported_custom_fan_modes{}; | ||||||
|   std::vector<enums::ClimatePreset> supported_presets{}; |   std::vector<enums::ClimatePreset> supported_presets{}; | ||||||
|   std::vector<std::string> supported_custom_presets{}; |   std::vector<std::string> supported_custom_presets{}; | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   float visual_current_temperature_step{0.0f}; |   float visual_current_temperature_step{0.0f}; | ||||||
|   bool supports_current_humidity{false}; |   bool supports_current_humidity{false}; | ||||||
|   bool supports_target_humidity{false}; |   bool supports_target_humidity{false}; | ||||||
| @@ -1356,14 +1307,13 @@ class ListEntitiesClimateResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ClimateStateResponse : public ProtoMessage { | class ClimateStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 47; |   static constexpr uint16_t MESSAGE_TYPE = 47; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 65; |   static constexpr uint16_t ESTIMATED_SIZE = 65; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "climate_state_response"; } |   static constexpr const char *message_name() { return "climate_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   enums::ClimateMode mode{}; |   enums::ClimateMode mode{}; | ||||||
|   float current_temperature{0.0f}; |   float current_temperature{0.0f}; | ||||||
|   float target_temperature{0.0f}; |   float target_temperature{0.0f}; | ||||||
| @@ -1430,23 +1380,16 @@ class ClimateCommandRequest : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesNumberResponse : public ProtoMessage { | class ListEntitiesNumberResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 49; |   static constexpr uint16_t MESSAGE_TYPE = 49; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 80; |   static constexpr uint16_t ESTIMATED_SIZE = 80; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_number_response"; } |   static constexpr const char *message_name() { return "list_entities_number_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   float min_value{0.0f}; |   float min_value{0.0f}; | ||||||
|   float max_value{0.0f}; |   float max_value{0.0f}; | ||||||
|   float step{0.0f}; |   float step{0.0f}; | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   std::string unit_of_measurement{}; |   std::string unit_of_measurement{}; | ||||||
|   enums::NumberMode mode{}; |   enums::NumberMode mode{}; | ||||||
|   std::string device_class{}; |   std::string device_class{}; | ||||||
| @@ -1461,14 +1404,13 @@ class ListEntitiesNumberResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class NumberStateResponse : public ProtoMessage { | class NumberStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 50; |   static constexpr uint16_t MESSAGE_TYPE = 50; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 12; |   static constexpr uint16_t ESTIMATED_SIZE = 12; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "number_state_response"; } |   static constexpr const char *message_name() { return "number_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   float state{0.0f}; |   float state{0.0f}; | ||||||
|   bool missing_state{false}; |   bool missing_state{false}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
| @@ -1499,21 +1441,14 @@ class NumberCommandRequest : public ProtoMessage { | |||||||
|  protected: |  protected: | ||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesSelectResponse : public ProtoMessage { | class ListEntitiesSelectResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 52; |   static constexpr uint16_t MESSAGE_TYPE = 52; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 63; |   static constexpr uint16_t ESTIMATED_SIZE = 63; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_select_response"; } |   static constexpr const char *message_name() { return "list_entities_select_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   std::vector<std::string> options{}; |   std::vector<std::string> options{}; | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
| @@ -1525,14 +1460,13 @@ class ListEntitiesSelectResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class SelectStateResponse : public ProtoMessage { | class SelectStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 53; |   static constexpr uint16_t MESSAGE_TYPE = 53; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 16; |   static constexpr uint16_t ESTIMATED_SIZE = 16; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "select_state_response"; } |   static constexpr const char *message_name() { return "select_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string state{}; |   std::string state{}; | ||||||
|   bool missing_state{false}; |   bool missing_state{false}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
| @@ -1565,23 +1499,16 @@ class SelectCommandRequest : public ProtoMessage { | |||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesSirenResponse : public ProtoMessage { | class ListEntitiesSirenResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 55; |   static constexpr uint16_t MESSAGE_TYPE = 55; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 67; |   static constexpr uint16_t ESTIMATED_SIZE = 67; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_siren_response"; } |   static constexpr const char *message_name() { return "list_entities_siren_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   std::vector<std::string> tones{}; |   std::vector<std::string> tones{}; | ||||||
|   bool supports_duration{false}; |   bool supports_duration{false}; | ||||||
|   bool supports_volume{false}; |   bool supports_volume{false}; | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
| @@ -1593,14 +1520,13 @@ class ListEntitiesSirenResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class SirenStateResponse : public ProtoMessage { | class SirenStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 56; |   static constexpr uint16_t MESSAGE_TYPE = 56; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 7; |   static constexpr uint16_t ESTIMATED_SIZE = 7; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "siren_state_response"; } |   static constexpr const char *message_name() { return "siren_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   bool state{false}; |   bool state{false}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| @@ -1639,20 +1565,13 @@ class SirenCommandRequest : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesLockResponse : public ProtoMessage { | class ListEntitiesLockResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 58; |   static constexpr uint16_t MESSAGE_TYPE = 58; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 60; |   static constexpr uint16_t ESTIMATED_SIZE = 60; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_lock_response"; } |   static constexpr const char *message_name() { return "list_entities_lock_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   bool assumed_state{false}; |   bool assumed_state{false}; | ||||||
|   bool supports_open{false}; |   bool supports_open{false}; | ||||||
|   bool requires_code{false}; |   bool requires_code{false}; | ||||||
| @@ -1668,14 +1587,13 @@ class ListEntitiesLockResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class LockStateResponse : public ProtoMessage { | class LockStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 59; |   static constexpr uint16_t MESSAGE_TYPE = 59; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 7; |   static constexpr uint16_t ESTIMATED_SIZE = 7; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "lock_state_response"; } |   static constexpr const char *message_name() { return "lock_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   enums::LockState state{}; |   enums::LockState state{}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| @@ -1709,20 +1627,13 @@ class LockCommandRequest : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesButtonResponse : public ProtoMessage { | class ListEntitiesButtonResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 61; |   static constexpr uint16_t MESSAGE_TYPE = 61; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 54; |   static constexpr uint16_t ESTIMATED_SIZE = 54; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_button_response"; } |   static constexpr const char *message_name() { return "list_entities_button_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   std::string device_class{}; |   std::string device_class{}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| @@ -1769,20 +1680,13 @@ class MediaPlayerSupportedFormat : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesMediaPlayerResponse : public ProtoMessage { | class ListEntitiesMediaPlayerResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 63; |   static constexpr uint16_t MESSAGE_TYPE = 63; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 81; |   static constexpr uint16_t ESTIMATED_SIZE = 81; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_media_player_response"; } |   static constexpr const char *message_name() { return "list_entities_media_player_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   bool supports_pause{false}; |   bool supports_pause{false}; | ||||||
|   std::vector<MediaPlayerSupportedFormat> supported_formats{}; |   std::vector<MediaPlayerSupportedFormat> supported_formats{}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
| @@ -1796,14 +1700,13 @@ class ListEntitiesMediaPlayerResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class MediaPlayerStateResponse : public ProtoMessage { | class MediaPlayerStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 64; |   static constexpr uint16_t MESSAGE_TYPE = 64; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 14; |   static constexpr uint16_t ESTIMATED_SIZE = 14; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "media_player_state_response"; } |   static constexpr const char *message_name() { return "media_player_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   enums::MediaPlayerState state{}; |   enums::MediaPlayerState state{}; | ||||||
|   float volume{0.0f}; |   float volume{0.0f}; | ||||||
|   bool muted{false}; |   bool muted{false}; | ||||||
| @@ -2653,20 +2556,13 @@ class VoiceAssistantSetConfiguration : public ProtoMessage { | |||||||
|  protected: |  protected: | ||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesAlarmControlPanelResponse : public ProtoMessage { | class ListEntitiesAlarmControlPanelResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 94; |   static constexpr uint16_t MESSAGE_TYPE = 94; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 53; |   static constexpr uint16_t ESTIMATED_SIZE = 53; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_alarm_control_panel_response"; } |   static constexpr const char *message_name() { return "list_entities_alarm_control_panel_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   uint32_t supported_features{0}; |   uint32_t supported_features{0}; | ||||||
|   bool requires_code{false}; |   bool requires_code{false}; | ||||||
|   bool requires_code_to_arm{false}; |   bool requires_code_to_arm{false}; | ||||||
| @@ -2681,14 +2577,13 @@ class ListEntitiesAlarmControlPanelResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class AlarmControlPanelStateResponse : public ProtoMessage { | class AlarmControlPanelStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 95; |   static constexpr uint16_t MESSAGE_TYPE = 95; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 7; |   static constexpr uint16_t ESTIMATED_SIZE = 7; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "alarm_control_panel_state_response"; } |   static constexpr const char *message_name() { return "alarm_control_panel_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   enums::AlarmControlPanelState state{}; |   enums::AlarmControlPanelState state{}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| @@ -2721,20 +2616,13 @@ class AlarmControlPanelCommandRequest : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesTextResponse : public ProtoMessage { | class ListEntitiesTextResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 97; |   static constexpr uint16_t MESSAGE_TYPE = 97; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 64; |   static constexpr uint16_t ESTIMATED_SIZE = 64; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_text_response"; } |   static constexpr const char *message_name() { return "list_entities_text_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   uint32_t min_length{0}; |   uint32_t min_length{0}; | ||||||
|   uint32_t max_length{0}; |   uint32_t max_length{0}; | ||||||
|   std::string pattern{}; |   std::string pattern{}; | ||||||
| @@ -2750,14 +2638,13 @@ class ListEntitiesTextResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class TextStateResponse : public ProtoMessage { | class TextStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 98; |   static constexpr uint16_t MESSAGE_TYPE = 98; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 16; |   static constexpr uint16_t ESTIMATED_SIZE = 16; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "text_state_response"; } |   static constexpr const char *message_name() { return "text_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string state{}; |   std::string state{}; | ||||||
|   bool missing_state{false}; |   bool missing_state{false}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
| @@ -2790,20 +2677,13 @@ class TextCommandRequest : public ProtoMessage { | |||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesDateResponse : public ProtoMessage { | class ListEntitiesDateResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 100; |   static constexpr uint16_t MESSAGE_TYPE = 100; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 45; |   static constexpr uint16_t ESTIMATED_SIZE = 45; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_date_response"; } |   static constexpr const char *message_name() { return "list_entities_date_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
| @@ -2815,14 +2695,13 @@ class ListEntitiesDateResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class DateStateResponse : public ProtoMessage { | class DateStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 101; |   static constexpr uint16_t MESSAGE_TYPE = 101; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 19; |   static constexpr uint16_t ESTIMATED_SIZE = 19; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "date_state_response"; } |   static constexpr const char *message_name() { return "date_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   bool missing_state{false}; |   bool missing_state{false}; | ||||||
|   uint32_t year{0}; |   uint32_t year{0}; | ||||||
|   uint32_t month{0}; |   uint32_t month{0}; | ||||||
| @@ -2858,20 +2737,13 @@ class DateCommandRequest : public ProtoMessage { | |||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesTimeResponse : public ProtoMessage { | class ListEntitiesTimeResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 103; |   static constexpr uint16_t MESSAGE_TYPE = 103; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 45; |   static constexpr uint16_t ESTIMATED_SIZE = 45; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_time_response"; } |   static constexpr const char *message_name() { return "list_entities_time_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
| @@ -2883,14 +2755,13 @@ class ListEntitiesTimeResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class TimeStateResponse : public ProtoMessage { | class TimeStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 104; |   static constexpr uint16_t MESSAGE_TYPE = 104; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 19; |   static constexpr uint16_t ESTIMATED_SIZE = 19; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "time_state_response"; } |   static constexpr const char *message_name() { return "time_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   bool missing_state{false}; |   bool missing_state{false}; | ||||||
|   uint32_t hour{0}; |   uint32_t hour{0}; | ||||||
|   uint32_t minute{0}; |   uint32_t minute{0}; | ||||||
| @@ -2926,20 +2797,13 @@ class TimeCommandRequest : public ProtoMessage { | |||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesEventResponse : public ProtoMessage { | class ListEntitiesEventResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 107; |   static constexpr uint16_t MESSAGE_TYPE = 107; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 72; |   static constexpr uint16_t ESTIMATED_SIZE = 72; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_event_response"; } |   static constexpr const char *message_name() { return "list_entities_event_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   std::string device_class{}; |   std::string device_class{}; | ||||||
|   std::vector<std::string> event_types{}; |   std::vector<std::string> event_types{}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
| @@ -2953,14 +2817,13 @@ class ListEntitiesEventResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class EventResponse : public ProtoMessage { | class EventResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 108; |   static constexpr uint16_t MESSAGE_TYPE = 108; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 14; |   static constexpr uint16_t ESTIMATED_SIZE = 14; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "event_response"; } |   static constexpr const char *message_name() { return "event_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string event_type{}; |   std::string event_type{}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| @@ -2972,20 +2835,13 @@ class EventResponse : public ProtoMessage { | |||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesValveResponse : public ProtoMessage { | class ListEntitiesValveResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 109; |   static constexpr uint16_t MESSAGE_TYPE = 109; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 60; |   static constexpr uint16_t ESTIMATED_SIZE = 60; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_valve_response"; } |   static constexpr const char *message_name() { return "list_entities_valve_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   std::string device_class{}; |   std::string device_class{}; | ||||||
|   bool assumed_state{false}; |   bool assumed_state{false}; | ||||||
|   bool supports_position{false}; |   bool supports_position{false}; | ||||||
| @@ -3001,14 +2857,13 @@ class ListEntitiesValveResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ValveStateResponse : public ProtoMessage { | class ValveStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 110; |   static constexpr uint16_t MESSAGE_TYPE = 110; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 12; |   static constexpr uint16_t ESTIMATED_SIZE = 12; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "valve_state_response"; } |   static constexpr const char *message_name() { return "valve_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   float position{0.0f}; |   float position{0.0f}; | ||||||
|   enums::ValveOperation current_operation{}; |   enums::ValveOperation current_operation{}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
| @@ -3042,20 +2897,13 @@ class ValveCommandRequest : public ProtoMessage { | |||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesDateTimeResponse : public ProtoMessage { | class ListEntitiesDateTimeResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 112; |   static constexpr uint16_t MESSAGE_TYPE = 112; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 45; |   static constexpr uint16_t ESTIMATED_SIZE = 45; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_date_time_response"; } |   static constexpr const char *message_name() { return "list_entities_date_time_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
| @@ -3067,14 +2915,13 @@ class ListEntitiesDateTimeResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class DateTimeStateResponse : public ProtoMessage { | class DateTimeStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 113; |   static constexpr uint16_t MESSAGE_TYPE = 113; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 12; |   static constexpr uint16_t ESTIMATED_SIZE = 12; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "date_time_state_response"; } |   static constexpr const char *message_name() { return "date_time_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   bool missing_state{false}; |   bool missing_state{false}; | ||||||
|   uint32_t epoch_seconds{0}; |   uint32_t epoch_seconds{0}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
| @@ -3105,20 +2952,13 @@ class DateTimeCommandRequest : public ProtoMessage { | |||||||
|  protected: |  protected: | ||||||
|   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; |   bool decode_32bit(uint32_t field_id, Proto32Bit value) override; | ||||||
| }; | }; | ||||||
| class ListEntitiesUpdateResponse : public ProtoMessage { | class ListEntitiesUpdateResponse : public InfoResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 116; |   static constexpr uint16_t MESSAGE_TYPE = 116; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 54; |   static constexpr uint16_t ESTIMATED_SIZE = 54; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "list_entities_update_response"; } |   static constexpr const char *message_name() { return "list_entities_update_response"; } | ||||||
| #endif | #endif | ||||||
|   std::string object_id{}; |  | ||||||
|   uint32_t key{0}; |  | ||||||
|   std::string name{}; |  | ||||||
|   std::string unique_id{}; |  | ||||||
|   std::string icon{}; |  | ||||||
|   bool disabled_by_default{false}; |  | ||||||
|   enums::EntityCategory entity_category{}; |  | ||||||
|   std::string device_class{}; |   std::string device_class{}; | ||||||
|   void encode(ProtoWriteBuffer buffer) const override; |   void encode(ProtoWriteBuffer buffer) const override; | ||||||
|   void calculate_size(uint32_t &total_size) const override; |   void calculate_size(uint32_t &total_size) const override; | ||||||
| @@ -3131,14 +2971,13 @@ class ListEntitiesUpdateResponse : public ProtoMessage { | |||||||
|   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; |   bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; | ||||||
|   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; |   bool decode_varint(uint32_t field_id, ProtoVarInt value) override; | ||||||
| }; | }; | ||||||
| class UpdateStateResponse : public ProtoMessage { | class UpdateStateResponse : public StateResponseProtoMessage { | ||||||
|  public: |  public: | ||||||
|   static constexpr uint16_t MESSAGE_TYPE = 117; |   static constexpr uint16_t MESSAGE_TYPE = 117; | ||||||
|   static constexpr uint16_t ESTIMATED_SIZE = 61; |   static constexpr uint16_t ESTIMATED_SIZE = 61; | ||||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | #ifdef HAS_PROTO_MESSAGE_DUMP | ||||||
|   static constexpr const char *message_name() { return "update_state_response"; } |   static constexpr const char *message_name() { return "update_state_response"; } | ||||||
| #endif | #endif | ||||||
|   uint32_t key{0}; |  | ||||||
|   bool missing_state{false}; |   bool missing_state{false}; | ||||||
|   bool in_progress{false}; |   bool in_progress{false}; | ||||||
|   bool has_progress{false}; |   bool has_progress{false}; | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ import sys | |||||||
| from textwrap import dedent | from textwrap import dedent | ||||||
| from typing import Any | from typing import Any | ||||||
|  |  | ||||||
| import aioesphomeapi.api_options_pb2 as pb | import api_options_pb2 as pb | ||||||
| import google.protobuf.descriptor_pb2 as descriptor | import google.protobuf.descriptor_pb2 as descriptor | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -848,7 +848,10 @@ def calculate_message_estimated_size(desc: descriptor.DescriptorProto) -> int: | |||||||
|     return total_size |     return total_size | ||||||
|  |  | ||||||
|  |  | ||||||
| def build_message_type(desc: descriptor.DescriptorProto) -> tuple[str, str]: | def build_message_type( | ||||||
|  |     desc: descriptor.DescriptorProto, | ||||||
|  |     base_class_fields: dict[str, list[descriptor.FieldDescriptorProto]] = None, | ||||||
|  | ) -> tuple[str, str]: | ||||||
|     public_content: list[str] = [] |     public_content: list[str] = [] | ||||||
|     protected_content: list[str] = [] |     protected_content: list[str] = [] | ||||||
|     decode_varint: list[str] = [] |     decode_varint: list[str] = [] | ||||||
| @@ -859,6 +862,12 @@ def build_message_type(desc: descriptor.DescriptorProto) -> tuple[str, str]: | |||||||
|     dump: list[str] = [] |     dump: list[str] = [] | ||||||
|     size_calc: list[str] = [] |     size_calc: list[str] = [] | ||||||
|  |  | ||||||
|  |     # Check if this message has a base class | ||||||
|  |     base_class = get_base_class(desc) | ||||||
|  |     common_field_names = set() | ||||||
|  |     if base_class and base_class_fields and base_class in base_class_fields: | ||||||
|  |         common_field_names = {f.name for f in base_class_fields[base_class]} | ||||||
|  |  | ||||||
|     # Get message ID if it's a service message |     # Get message ID if it's a service message | ||||||
|     message_id: int | None = get_opt(desc, pb.id) |     message_id: int | None = get_opt(desc, pb.id) | ||||||
|  |  | ||||||
| @@ -886,8 +895,14 @@ def build_message_type(desc: descriptor.DescriptorProto) -> tuple[str, str]: | |||||||
|             ti = RepeatedTypeInfo(field) |             ti = RepeatedTypeInfo(field) | ||||||
|         else: |         else: | ||||||
|             ti = TYPE_INFO[field.type](field) |             ti = TYPE_INFO[field.type](field) | ||||||
|         protected_content.extend(ti.protected_content) |  | ||||||
|         public_content.extend(ti.public_content) |         # Skip field declarations for fields that are in the base class | ||||||
|  |         # but include their encode/decode logic | ||||||
|  |         if field.name not in common_field_names: | ||||||
|  |             protected_content.extend(ti.protected_content) | ||||||
|  |             public_content.extend(ti.public_content) | ||||||
|  |  | ||||||
|  |         # Always include encode/decode logic for all fields | ||||||
|         encode.append(ti.encode_content) |         encode.append(ti.encode_content) | ||||||
|         size_calc.append(ti.get_size_calculation(f"this->{ti.field_name}")) |         size_calc.append(ti.get_size_calculation(f"this->{ti.field_name}")) | ||||||
|  |  | ||||||
| @@ -1001,7 +1016,10 @@ def build_message_type(desc: descriptor.DescriptorProto) -> tuple[str, str]: | |||||||
|     prot += "#endif\n" |     prot += "#endif\n" | ||||||
|     public_content.append(prot) |     public_content.append(prot) | ||||||
|  |  | ||||||
|     out = f"class {desc.name} : public ProtoMessage {{\n" |     if base_class: | ||||||
|  |         out = f"class {desc.name} : public {base_class} {{\n" | ||||||
|  |     else: | ||||||
|  |         out = f"class {desc.name} : public ProtoMessage {{\n" | ||||||
|     out += " public:\n" |     out += " public:\n" | ||||||
|     out += indent("\n".join(public_content)) + "\n" |     out += indent("\n".join(public_content)) + "\n" | ||||||
|     out += "\n" |     out += "\n" | ||||||
| @@ -1033,6 +1051,132 @@ def get_opt( | |||||||
|     return desc.options.Extensions[opt] |     return desc.options.Extensions[opt] | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def get_base_class(desc: descriptor.DescriptorProto) -> str | None: | ||||||
|  |     """Get the base_class option from a message descriptor.""" | ||||||
|  |     if not desc.options.HasExtension(pb.base_class): | ||||||
|  |         return None | ||||||
|  |     return desc.options.Extensions[pb.base_class] | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def collect_messages_by_base_class( | ||||||
|  |     messages: list[descriptor.DescriptorProto], | ||||||
|  | ) -> dict[str, list[descriptor.DescriptorProto]]: | ||||||
|  |     """Group messages by their base_class option.""" | ||||||
|  |     base_class_groups = {} | ||||||
|  |  | ||||||
|  |     for msg in messages: | ||||||
|  |         base_class = get_base_class(msg) | ||||||
|  |         if base_class: | ||||||
|  |             if base_class not in base_class_groups: | ||||||
|  |                 base_class_groups[base_class] = [] | ||||||
|  |             base_class_groups[base_class].append(msg) | ||||||
|  |  | ||||||
|  |     return base_class_groups | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def find_common_fields( | ||||||
|  |     messages: list[descriptor.DescriptorProto], | ||||||
|  | ) -> list[descriptor.FieldDescriptorProto]: | ||||||
|  |     """Find fields that are common to all messages in the list.""" | ||||||
|  |     if not messages: | ||||||
|  |         return [] | ||||||
|  |  | ||||||
|  |     # Start with fields from the first message | ||||||
|  |     first_msg_fields = {field.name: field for field in messages[0].field} | ||||||
|  |     common_fields = [] | ||||||
|  |  | ||||||
|  |     # Check each field to see if it exists in all messages with same type | ||||||
|  |     # Field numbers can vary between messages - derived classes handle the mapping | ||||||
|  |     for field_name, field in first_msg_fields.items(): | ||||||
|  |         is_common = True | ||||||
|  |  | ||||||
|  |         for msg in messages[1:]: | ||||||
|  |             found = False | ||||||
|  |             for other_field in msg.field: | ||||||
|  |                 if ( | ||||||
|  |                     other_field.name == field_name | ||||||
|  |                     and other_field.type == field.type | ||||||
|  |                     and other_field.label == field.label | ||||||
|  |                 ): | ||||||
|  |                     found = True | ||||||
|  |                     break | ||||||
|  |  | ||||||
|  |             if not found: | ||||||
|  |                 is_common = False | ||||||
|  |                 break | ||||||
|  |  | ||||||
|  |         if is_common: | ||||||
|  |             common_fields.append(field) | ||||||
|  |  | ||||||
|  |     # Sort by field number to maintain order | ||||||
|  |     common_fields.sort(key=lambda f: f.number) | ||||||
|  |     return common_fields | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def build_base_class( | ||||||
|  |     base_class_name: str, | ||||||
|  |     common_fields: list[descriptor.FieldDescriptorProto], | ||||||
|  | ) -> tuple[str, str]: | ||||||
|  |     """Build the base class definition and implementation.""" | ||||||
|  |     public_content = [] | ||||||
|  |     protected_content = [] | ||||||
|  |  | ||||||
|  |     # For base classes, we only declare the fields but don't handle encode/decode | ||||||
|  |     # The derived classes will handle encoding/decoding with their specific field numbers | ||||||
|  |     for field in common_fields: | ||||||
|  |         if field.label == 3:  # repeated | ||||||
|  |             ti = RepeatedTypeInfo(field) | ||||||
|  |         else: | ||||||
|  |             ti = TYPE_INFO[field.type](field) | ||||||
|  |  | ||||||
|  |         # Only add field declarations, not encode/decode logic | ||||||
|  |         protected_content.extend(ti.protected_content) | ||||||
|  |         public_content.extend(ti.public_content) | ||||||
|  |  | ||||||
|  |     # Build header | ||||||
|  |     out = f"class {base_class_name} : public ProtoMessage {{\n" | ||||||
|  |     out += " public:\n" | ||||||
|  |  | ||||||
|  |     # Add virtual destructor | ||||||
|  |     public_content.insert(0, f"virtual ~{base_class_name}() = default;") | ||||||
|  |  | ||||||
|  |     # Base classes don't implement encode/decode/calculate_size | ||||||
|  |     # Derived classes handle these with their specific field numbers | ||||||
|  |     cpp = "" | ||||||
|  |  | ||||||
|  |     out += indent("\n".join(public_content)) + "\n" | ||||||
|  |     out += "\n" | ||||||
|  |     out += " protected:\n" | ||||||
|  |     out += indent("\n".join(protected_content)) | ||||||
|  |     if protected_content: | ||||||
|  |         out += "\n" | ||||||
|  |     out += "};\n" | ||||||
|  |  | ||||||
|  |     # No implementation needed for base classes | ||||||
|  |  | ||||||
|  |     return out, cpp | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def generate_base_classes( | ||||||
|  |     base_class_groups: dict[str, list[descriptor.DescriptorProto]], | ||||||
|  | ) -> tuple[str, str]: | ||||||
|  |     """Generate all base classes.""" | ||||||
|  |     all_headers = [] | ||||||
|  |     all_cpp = [] | ||||||
|  |  | ||||||
|  |     for base_class_name, messages in base_class_groups.items(): | ||||||
|  |         # Find common fields | ||||||
|  |         common_fields = find_common_fields(messages) | ||||||
|  |  | ||||||
|  |         if common_fields: | ||||||
|  |             # Generate base class | ||||||
|  |             header, cpp = build_base_class(base_class_name, common_fields) | ||||||
|  |             all_headers.append(header) | ||||||
|  |             all_cpp.append(cpp) | ||||||
|  |  | ||||||
|  |     return "\n".join(all_headers), "\n".join(all_cpp) | ||||||
|  |  | ||||||
|  |  | ||||||
| def build_service_message_type( | def build_service_message_type( | ||||||
|     mt: descriptor.DescriptorProto, |     mt: descriptor.DescriptorProto, | ||||||
| ) -> tuple[str, str] | None: | ) -> tuple[str, str] | None: | ||||||
| @@ -1134,8 +1278,25 @@ def main() -> None: | |||||||
|  |  | ||||||
|     mt = file.message_type |     mt = file.message_type | ||||||
|  |  | ||||||
|  |     # Collect messages by base class | ||||||
|  |     base_class_groups = collect_messages_by_base_class(mt) | ||||||
|  |  | ||||||
|  |     # Find common fields for each base class | ||||||
|  |     base_class_fields = {} | ||||||
|  |     for base_class_name, messages in base_class_groups.items(): | ||||||
|  |         common_fields = find_common_fields(messages) | ||||||
|  |         if common_fields: | ||||||
|  |             base_class_fields[base_class_name] = common_fields | ||||||
|  |  | ||||||
|  |     # Generate base classes | ||||||
|  |     if base_class_fields: | ||||||
|  |         base_headers, base_cpp = generate_base_classes(base_class_groups) | ||||||
|  |         content += base_headers | ||||||
|  |         cpp += base_cpp | ||||||
|  |  | ||||||
|  |     # Generate message types with base class information | ||||||
|     for m in mt: |     for m in mt: | ||||||
|         s, c = build_message_type(m) |         s, c = build_message_type(m, base_class_fields) | ||||||
|         content += s |         content += s | ||||||
|         cpp += c |         cpp += c | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user