diff --git a/aioesphomeapi/api.proto b/aioesphomeapi/api.proto index 4e55744..2e01856 100644 --- a/aioesphomeapi/api.proto +++ b/aioesphomeapi/api.proto @@ -653,6 +653,25 @@ enum ClimateMode { CLIMATE_MODE_AUTO = 1; CLIMATE_MODE_COOL = 2; CLIMATE_MODE_HEAT = 3; + CLIMATE_MODE_FAN_ONLY = 4; + CLIMATE_MODE_DRY = 5; +} +enum ClimateFanMode { + CLIMATE_FAN_ON = 0; + CLIMATE_FAN_OFF = 1; + CLIMATE_FAN_AUTO = 2; + CLIMATE_FAN_LOW = 3; + CLIMATE_FAN_MEDIUM = 4; + CLIMATE_FAN_HIGH = 5; + CLIMATE_FAN_MIDDLE = 6; + CLIMATE_FAN_FOCUS = 7; + CLIMATE_FAN_DIFFUSE = 8; +} +enum ClimateSwingMode { + CLIMATE_SWING_OFF = 0; + CLIMATE_SWING_BOTH = 1; + CLIMATE_SWING_VERTICAL = 2; + CLIMATE_SWINT_HORIZONTAL = 3; } enum ClimateAction { CLIMATE_ACTION_OFF = 0; @@ -678,6 +697,8 @@ message ListEntitiesClimateResponse { float visual_temperature_step = 10; bool supports_away = 11; bool supports_action = 12; + repeated ClimateFanMode supported_fan_modes = 13; + repeated ClimateSwingMode supported_swing_modes = 14; } message ClimateStateResponse { option (id) = 47; @@ -693,6 +714,8 @@ message ClimateStateResponse { float target_temperature_high = 6; bool away = 7; ClimateAction action = 8; + ClimateFanMode fan_mode = 9; + ClimateSwingMode swing_mode = 10; } message ClimateCommandRequest { option (id) = 48; @@ -711,4 +734,8 @@ message ClimateCommandRequest { float target_temperature_high = 9; bool has_away = 10; bool away = 11; + bool has_fan_mode = 12; + ClimateFanMode fan_mode = 13; + bool has_swing_mode = 14; + ClimateSwingMode swing_mode = 15; } diff --git a/aioesphomeapi/api_options_pb2.py b/aioesphomeapi/api_options_pb2.py index 76f84a4..2862422 100644 --- a/aioesphomeapi/api_options_pb2.py +++ b/aioesphomeapi/api_options_pb2.py @@ -1,54 +1,51 @@ -# -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: api_options.proto -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf.internal import enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 from google.protobuf import symbol_database as _symbol_database +from google.protobuf import reflection as _reflection +from google.protobuf import message as _message +from google.protobuf import descriptor as _descriptor +from google.protobuf.internal import enum_type_wrapper +import sys +_b = sys.version_info[0] < 3 and ( + lambda x: x) or (lambda x: x.encode('latin1')) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() -from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 - - DESCRIPTOR = _descriptor.FileDescriptor( - name='api_options.proto', - package='', - syntax='proto2', - serialized_options=None, - serialized_pb=_b('\n\x11\x61pi_options.proto\x1a google/protobuf/descriptor.proto\"\x06\n\x04void*F\n\rAPISourceType\x12\x0f\n\x0bSOURCE_BOTH\x10\x00\x12\x11\n\rSOURCE_SERVER\x10\x01\x12\x11\n\rSOURCE_CLIENT\x10\x02:E\n\x16needs_setup_connection\x12\x1e.google.protobuf.MethodOptions\x18\x8e\x08 \x01(\x08:\x04true:C\n\x14needs_authentication\x12\x1e.google.protobuf.MethodOptions\x18\x8f\x08 \x01(\x08:\x04true:/\n\x02id\x12\x1f.google.protobuf.MessageOptions\x18\x8c\x08 \x01(\r:\x01\x30:M\n\x06source\x12\x1f.google.protobuf.MessageOptions\x18\x8d\x08 \x01(\x0e\x32\x0e.APISourceType:\x0bSOURCE_BOTH:/\n\x05ifdef\x12\x1f.google.protobuf.MessageOptions\x18\x8e\x08 \x01(\t:3\n\x03log\x12\x1f.google.protobuf.MessageOptions\x18\x8f\x08 \x01(\x08:\x04true:9\n\x08no_delay\x12\x1f.google.protobuf.MessageOptions\x18\x90\x08 \x01(\x08:\x05\x66\x61lse') - , - dependencies=[google_dot_protobuf_dot_descriptor__pb2.DESCRIPTOR,]) + name='api_options.proto', + package='', + syntax='proto2', + serialized_options=None, + serialized_pb=_b('\n\x11\x61pi_options.proto\x1a google/protobuf/descriptor.proto\"\x06\n\x04void*F\n\rAPISourceType\x12\x0f\n\x0bSOURCE_BOTH\x10\x00\x12\x11\n\rSOURCE_SERVER\x10\x01\x12\x11\n\rSOURCE_CLIENT\x10\x02:E\n\x16needs_setup_connection\x12\x1e.google.protobuf.MethodOptions\x18\x8e\x08 \x01(\x08:\x04true:C\n\x14needs_authentication\x12\x1e.google.protobuf.MethodOptions\x18\x8f\x08 \x01(\x08:\x04true:/\n\x02id\x12\x1f.google.protobuf.MessageOptions\x18\x8c\x08 \x01(\r:\x01\x30:M\n\x06source\x12\x1f.google.protobuf.MessageOptions\x18\x8d\x08 \x01(\x0e\x32\x0e.APISourceType:\x0bSOURCE_BOTH:/\n\x05ifdef\x12\x1f.google.protobuf.MessageOptions\x18\x8e\x08 \x01(\t:3\n\x03log\x12\x1f.google.protobuf.MessageOptions\x18\x8f\x08 \x01(\x08:\x04true:9\n\x08no_delay\x12\x1f.google.protobuf.MessageOptions\x18\x90\x08 \x01(\x08:\x05\x66\x61lse'), + dependencies=[google_dot_protobuf_dot_descriptor__pb2.DESCRIPTOR, ]) _APISOURCETYPE = _descriptor.EnumDescriptor( - name='APISourceType', - full_name='APISourceType', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='SOURCE_BOTH', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='SOURCE_SERVER', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='SOURCE_CLIENT', index=2, number=2, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=63, - serialized_end=133, + name='APISourceType', + full_name='APISourceType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='SOURCE_BOTH', index=0, number=0, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SOURCE_SERVER', index=1, number=1, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SOURCE_CLIENT', index=2, number=2, + serialized_options=None, + type=None), + ], + containing_type=None, + serialized_options=None, + serialized_start=63, + serialized_end=133, ) _sym_db.RegisterEnumDescriptor(_APISOURCETYPE) @@ -59,83 +56,83 @@ SOURCE_CLIENT = 2 NEEDS_SETUP_CONNECTION_FIELD_NUMBER = 1038 needs_setup_connection = _descriptor.FieldDescriptor( - name='needs_setup_connection', full_name='needs_setup_connection', index=0, - number=1038, type=8, cpp_type=7, label=1, - has_default_value=True, default_value=True, - message_type=None, enum_type=None, containing_type=None, - is_extension=True, extension_scope=None, - serialized_options=None, file=DESCRIPTOR) + name='needs_setup_connection', full_name='needs_setup_connection', index=0, + number=1038, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=True, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + serialized_options=None, file=DESCRIPTOR) NEEDS_AUTHENTICATION_FIELD_NUMBER = 1039 needs_authentication = _descriptor.FieldDescriptor( - name='needs_authentication', full_name='needs_authentication', index=1, - number=1039, type=8, cpp_type=7, label=1, - has_default_value=True, default_value=True, - message_type=None, enum_type=None, containing_type=None, - is_extension=True, extension_scope=None, - serialized_options=None, file=DESCRIPTOR) + name='needs_authentication', full_name='needs_authentication', index=1, + number=1039, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=True, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + serialized_options=None, file=DESCRIPTOR) ID_FIELD_NUMBER = 1036 id = _descriptor.FieldDescriptor( - name='id', full_name='id', index=2, - number=1036, type=13, cpp_type=3, label=1, - has_default_value=True, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=True, extension_scope=None, - serialized_options=None, file=DESCRIPTOR) + name='id', full_name='id', index=2, + number=1036, type=13, cpp_type=3, label=1, + has_default_value=True, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + serialized_options=None, file=DESCRIPTOR) SOURCE_FIELD_NUMBER = 1037 source = _descriptor.FieldDescriptor( - name='source', full_name='source', index=3, - number=1037, type=14, cpp_type=8, label=1, - has_default_value=True, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=True, extension_scope=None, - serialized_options=None, file=DESCRIPTOR) + name='source', full_name='source', index=3, + number=1037, type=14, cpp_type=8, label=1, + has_default_value=True, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + serialized_options=None, file=DESCRIPTOR) IFDEF_FIELD_NUMBER = 1038 ifdef = _descriptor.FieldDescriptor( - name='ifdef', full_name='ifdef', index=4, - number=1038, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=True, extension_scope=None, - serialized_options=None, file=DESCRIPTOR) + name='ifdef', full_name='ifdef', index=4, + number=1038, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + serialized_options=None, file=DESCRIPTOR) LOG_FIELD_NUMBER = 1039 log = _descriptor.FieldDescriptor( - name='log', full_name='log', index=5, - number=1039, type=8, cpp_type=7, label=1, - has_default_value=True, default_value=True, - message_type=None, enum_type=None, containing_type=None, - is_extension=True, extension_scope=None, - serialized_options=None, file=DESCRIPTOR) + name='log', full_name='log', index=5, + number=1039, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=True, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + serialized_options=None, file=DESCRIPTOR) NO_DELAY_FIELD_NUMBER = 1040 no_delay = _descriptor.FieldDescriptor( - name='no_delay', full_name='no_delay', index=6, - number=1040, type=8, cpp_type=7, label=1, - has_default_value=True, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=True, extension_scope=None, - serialized_options=None, file=DESCRIPTOR) + name='no_delay', full_name='no_delay', index=6, + number=1040, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + serialized_options=None, file=DESCRIPTOR) _VOID = _descriptor.Descriptor( - name='void', - full_name='void', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=55, - serialized_end=61, + name='void', + full_name='void', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=55, + serialized_end=61, ) DESCRIPTOR.message_types_by_name['void'] = _VOID @@ -149,20 +146,24 @@ DESCRIPTOR.extensions_by_name['log'] = log DESCRIPTOR.extensions_by_name['no_delay'] = no_delay _sym_db.RegisterFileDescriptor(DESCRIPTOR) -void = _reflection.GeneratedProtocolMessageType('void', (_message.Message,), { - 'DESCRIPTOR' : _VOID, - '__module__' : 'api_options_pb2' - # @@protoc_insertion_point(class_scope:void) - }) +void = _reflection.GeneratedProtocolMessageType('void', (_message.Message,), dict( + DESCRIPTOR=_VOID, + __module__='api_options_pb2' + # @@protoc_insertion_point(class_scope:void) +)) _sym_db.RegisterMessage(void) -google_dot_protobuf_dot_descriptor__pb2.MethodOptions.RegisterExtension(needs_setup_connection) -google_dot_protobuf_dot_descriptor__pb2.MethodOptions.RegisterExtension(needs_authentication) +google_dot_protobuf_dot_descriptor__pb2.MethodOptions.RegisterExtension( + needs_setup_connection) +google_dot_protobuf_dot_descriptor__pb2.MethodOptions.RegisterExtension( + needs_authentication) google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(id) source.enum_type = _APISOURCETYPE -google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(source) +google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension( + source) google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(ifdef) google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(log) -google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(no_delay) +google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension( + no_delay) # @@protoc_insertion_point(module_scope) diff --git a/aioesphomeapi/api_pb2.py b/aioesphomeapi/api_pb2.py index 2d73d27..613166b 100644 --- a/aioesphomeapi/api_pb2.py +++ b/aioesphomeapi/api_pb2.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: api.proto @@ -22,7 +21,7 @@ DESCRIPTOR = _descriptor.FileDescriptor( package='', syntax='proto3', serialized_options=None, - serialized_pb=_b('\n\tapi.proto\x1a\x11\x61pi_options.proto\".\n\x0cHelloRequest\x12\x13\n\x0b\x63lient_info\x18\x01 \x01(\t:\t\xe0@\x01\xe8@\x02\x80\x41\x01\"e\n\rHelloResponse\x12\x19\n\x11\x61pi_version_major\x18\x01 \x01(\r\x12\x19\n\x11\x61pi_version_minor\x18\x02 \x01(\r\x12\x13\n\x0bserver_info\x18\x03 \x01(\t:\t\xe0@\x02\xe8@\x01\x80\x41\x01\"-\n\x0e\x43onnectRequest\x12\x10\n\x08password\x18\x01 \x01(\t:\t\xe0@\x03\xe8@\x02\x80\x41\x01\"6\n\x0f\x43onnectResponse\x12\x18\n\x10invalid_password\x18\x01 \x01(\x08:\t\xe0@\x04\xe8@\x01\x80\x41\x01\"\x1e\n\x11\x44isconnectRequest:\t\xe0@\x05\xe8@\x00\x80\x41\x01\"\x1f\n\x12\x44isconnectResponse:\t\xe0@\x06\xe8@\x00\x80\x41\x01\"\x15\n\x0bPingRequest:\x06\xe0@\x07\xe8@\x00\"\x16\n\x0cPingResponse:\x06\xe0@\x08\xe8@\x00\"\x1b\n\x11\x44\x65viceInfoRequest:\x06\xe0@\t\xe8@\x02\"\xb0\x01\n\x12\x44\x65viceInfoResponse\x12\x15\n\ruses_password\x18\x01 \x01(\x08\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0bmac_address\x18\x03 \x01(\t\x12\x17\n\x0f\x65sphome_version\x18\x04 \x01(\t\x12\x18\n\x10\x63ompilation_time\x18\x05 \x01(\t\x12\r\n\x05model\x18\x06 \x01(\t\x12\x16\n\x0ehas_deep_sleep\x18\x07 \x01(\x08:\x06\xe0@\n\xe8@\x01\"\x1d\n\x13ListEntitiesRequest:\x06\xe0@\x0b\xe8@\x02\"%\n\x18ListEntitiesDoneResponse:\t\xe0@\x13\xe8@\x01\x80\x41\x01\" \n\x16SubscribeStatesRequest:\x06\xe0@\x14\xe8@\x02\"\xb6\x01\n ListEntitiesBinarySensorResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x14\n\x0c\x64\x65vice_class\x18\x05 \x01(\t\x12\x1f\n\x17is_status_binary_sensor\x18\x06 \x01(\x08:\x1a\xe0@\x0c\xe8@\x01\xf2@\x11USE_BINARY_SENSOR\"m\n\x19\x42inarySensorStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08\x12\x15\n\rmissing_state\x18\x03 \x01(\x08:\x1d\xe0@\x15\xe8@\x01\xf2@\x11USE_BINARY_SENSOR\x80\x41\x01\"\xcf\x01\n\x19ListEntitiesCoverResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x15\n\rassumed_state\x18\x05 \x01(\x08\x12\x19\n\x11supports_position\x18\x06 \x01(\x08\x12\x15\n\rsupports_tilt\x18\x07 \x01(\x08\x12\x14\n\x0c\x64\x65vice_class\x18\x08 \x01(\t:\x12\xe0@\r\xe8@\x01\xf2@\tUSE_COVER\"\xad\x01\n\x12\x43overStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\'\n\x0clegacy_state\x18\x02 \x01(\x0e\x32\x11.LegacyCoverState\x12\x10\n\x08position\x18\x03 \x01(\x02\x12\x0c\n\x04tilt\x18\x04 \x01(\x02\x12*\n\x11\x63urrent_operation\x18\x05 \x01(\x0e\x32\x0f.CoverOperation:\x15\xe0@\x16\xe8@\x01\xf2@\tUSE_COVER\x80\x41\x01\"\xd8\x01\n\x13\x43overCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x1a\n\x12has_legacy_command\x18\x02 \x01(\x08\x12+\n\x0elegacy_command\x18\x03 \x01(\x0e\x32\x13.LegacyCoverCommand\x12\x14\n\x0chas_position\x18\x04 \x01(\x08\x12\x10\n\x08position\x18\x05 \x01(\x02\x12\x10\n\x08has_tilt\x18\x06 \x01(\x08\x12\x0c\n\x04tilt\x18\x07 \x01(\x02\x12\x0c\n\x04stop\x18\x08 \x01(\x08:\x15\xe0@\x1e\xe8@\x02\xf2@\tUSE_COVER\x80\x41\x01\"\xa2\x01\n\x17ListEntitiesFanResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x1c\n\x14supports_oscillation\x18\x05 \x01(\x08\x12\x16\n\x0esupports_speed\x18\x06 \x01(\x08:\x10\xe0@\x0e\xe8@\x01\xf2@\x07USE_FAN\"r\n\x10\x46\x61nStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08\x12\x13\n\x0boscillating\x18\x03 \x01(\x08\x12\x18\n\x05speed\x18\x04 \x01(\x0e\x32\t.FanSpeed:\x13\xe0@\x17\xe8@\x01\xf2@\x07USE_FAN\x80\x41\x01\"\xb2\x01\n\x11\x46\x61nCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x11\n\thas_state\x18\x02 \x01(\x08\x12\r\n\x05state\x18\x03 \x01(\x08\x12\x11\n\thas_speed\x18\x04 \x01(\x08\x12\x18\n\x05speed\x18\x05 \x01(\x0e\x32\t.FanSpeed\x12\x17\n\x0fhas_oscillating\x18\x06 \x01(\x08\x12\x13\n\x0boscillating\x18\x07 \x01(\x08:\x13\xe0@\x1f\xe8@\x02\xf2@\x07USE_FAN\x80\x41\x01\"\x9e\x02\n\x19ListEntitiesLightResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x1b\n\x13supports_brightness\x18\x05 \x01(\x08\x12\x14\n\x0csupports_rgb\x18\x06 \x01(\x08\x12\x1c\n\x14supports_white_value\x18\x07 \x01(\x08\x12\"\n\x1asupports_color_temperature\x18\x08 \x01(\x08\x12\x12\n\nmin_mireds\x18\t \x01(\x02\x12\x12\n\nmax_mireds\x18\n \x01(\x02\x12\x0f\n\x07\x65\x66\x66\x65\x63ts\x18\x0b \x03(\t:\x12\xe0@\x0f\xe8@\x01\xf2@\tUSE_LIGHT\"\xbf\x01\n\x12LightStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08\x12\x12\n\nbrightness\x18\x03 \x01(\x02\x12\x0b\n\x03red\x18\x04 \x01(\x02\x12\r\n\x05green\x18\x05 \x01(\x02\x12\x0c\n\x04\x62lue\x18\x06 \x01(\x02\x12\r\n\x05white\x18\x07 \x01(\x02\x12\x19\n\x11\x63olor_temperature\x18\x08 \x01(\x02\x12\x0e\n\x06\x65\x66\x66\x65\x63t\x18\t \x01(\t:\x15\xe0@\x18\xe8@\x01\xf2@\tUSE_LIGHT\x80\x41\x01\"\xac\x03\n\x13LightCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x11\n\thas_state\x18\x02 \x01(\x08\x12\r\n\x05state\x18\x03 \x01(\x08\x12\x16\n\x0ehas_brightness\x18\x04 \x01(\x08\x12\x12\n\nbrightness\x18\x05 \x01(\x02\x12\x0f\n\x07has_rgb\x18\x06 \x01(\x08\x12\x0b\n\x03red\x18\x07 \x01(\x02\x12\r\n\x05green\x18\x08 \x01(\x02\x12\x0c\n\x04\x62lue\x18\t \x01(\x02\x12\x11\n\thas_white\x18\n \x01(\x08\x12\r\n\x05white\x18\x0b \x01(\x02\x12\x1d\n\x15has_color_temperature\x18\x0c \x01(\x08\x12\x19\n\x11\x63olor_temperature\x18\r \x01(\x02\x12\x1d\n\x15has_transition_length\x18\x0e \x01(\x08\x12\x19\n\x11transition_length\x18\x0f \x01(\r\x12\x18\n\x10has_flash_length\x18\x10 \x01(\x08\x12\x14\n\x0c\x66lash_length\x18\x11 \x01(\r\x12\x12\n\nhas_effect\x18\x12 \x01(\x08\x12\x0e\n\x06\x65\x66\x66\x65\x63t\x18\x13 \x01(\t:\x15\xe0@ \xe8@\x02\xf2@\tUSE_LIGHT\x80\x41\x01\"\xce\x01\n\x1aListEntitiesSensorResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x0c\n\x04icon\x18\x05 \x01(\t\x12\x1b\n\x13unit_of_measurement\x18\x06 \x01(\t\x12\x19\n\x11\x61\x63\x63uracy_decimals\x18\x07 \x01(\x05\x12\x14\n\x0c\x66orce_update\x18\x08 \x01(\x08:\x13\xe0@\x10\xe8@\x01\xf2@\nUSE_SENSOR\"`\n\x13SensorStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x02\x12\x15\n\rmissing_state\x18\x03 \x01(\x08:\x16\xe0@\x19\xe8@\x01\xf2@\nUSE_SENSOR\x80\x41\x01\"\x97\x01\n\x1aListEntitiesSwitchResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x0c\n\x04icon\x18\x05 \x01(\t\x12\x15\n\rassumed_state\x18\x06 \x01(\x08:\x13\xe0@\x11\xe8@\x01\xf2@\nUSE_SWITCH\"I\n\x13SwitchStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08:\x16\xe0@\x1a\xe8@\x01\xf2@\nUSE_SWITCH\x80\x41\x01\"J\n\x14SwitchCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08:\x16\xe0@!\xe8@\x02\xf2@\nUSE_SWITCH\x80\x41\x01\"\x89\x01\n\x1eListEntitiesTextSensorResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x0c\n\x04icon\x18\x05 \x01(\t:\x18\xe0@\x12\xe8@\x01\xf2@\x0fUSE_TEXT_SENSOR\"i\n\x17TextSensorStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\t\x12\x15\n\rmissing_state\x18\x03 \x01(\x08:\x1b\xe0@\x1b\xe8@\x01\xf2@\x0fUSE_TEXT_SENSOR\x80\x41\x01\"M\n\x14SubscribeLogsRequest\x12\x18\n\x05level\x18\x01 \x01(\x0e\x32\t.LogLevel\x12\x13\n\x0b\x64ump_config\x18\x02 \x01(\x08:\x06\xe0@\x1c\xe8@\x02\"r\n\x15SubscribeLogsResponse\x12\x18\n\x05level\x18\x01 \x01(\x0e\x32\t.LogLevel\x12\x0b\n\x03tag\x18\x02 \x01(\t\x12\x0f\n\x07message\x18\x03 \x01(\t\x12\x13\n\x0bsend_failed\x18\x04 \x01(\x08:\x0c\xe0@\x1d\xe8@\x01\xf8@\x00\x80\x41\x00\"/\n%SubscribeHomeassistantServicesRequest:\x06\xe0@\"\xe8@\x02\"5\n\x17HomeassistantServiceMap\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xd2\x01\n\x1cHomeassistantServiceResponse\x12\x0f\n\x07service\x18\x01 \x01(\t\x12&\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32\x18.HomeassistantServiceMap\x12/\n\rdata_template\x18\x03 \x03(\x0b\x32\x18.HomeassistantServiceMap\x12+\n\tvariables\x18\x04 \x03(\x0b\x32\x18.HomeassistantServiceMap\x12\x10\n\x08is_event\x18\x05 \x01(\x08:\t\xe0@#\xe8@\x01\x80\x41\x01\"-\n#SubscribeHomeAssistantStatesRequest:\x06\xe0@&\xe8@\x02\"@\n#SubscribeHomeAssistantStateResponse\x12\x11\n\tentity_id\x18\x01 \x01(\t:\x06\xe0@\'\xe8@\x01\"I\n\x1aHomeAssistantStateResponse\x12\x11\n\tentity_id\x18\x01 \x01(\t\x12\r\n\x05state\x18\x02 \x01(\t:\t\xe0@(\xe8@\x02\x80\x41\x01\"\x18\n\x0eGetTimeRequest:\x06\xe0@$\xe8@\x00\"3\n\x0fGetTimeResponse\x12\x15\n\repoch_seconds\x18\x01 \x01(\x07:\t\xe0@%\xe8@\x00\x80\x41\x01\"K\n\x1cListEntitiesServicesArgument\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\x04type\x18\x02 \x01(\x0e\x32\x0f.ServiceArgType\"n\n\x1cListEntitiesServicesResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12+\n\x04\x61rgs\x18\x03 \x03(\x0b\x32\x1d.ListEntitiesServicesArgument:\x06\xe0@)\xe8@\x01\"\xc8\x01\n\x16\x45xecuteServiceArgument\x12\r\n\x05\x62ool_\x18\x01 \x01(\x08\x12\x12\n\nlegacy_int\x18\x02 \x01(\x05\x12\x0e\n\x06\x66loat_\x18\x03 \x01(\x02\x12\x0f\n\x07string_\x18\x04 \x01(\t\x12\x0c\n\x04int_\x18\x05 \x01(\x11\x12\x16\n\nbool_array\x18\x06 \x03(\x08\x42\x02\x10\x00\x12\x15\n\tint_array\x18\x07 \x03(\x11\x42\x02\x10\x00\x12\x17\n\x0b\x66loat_array\x18\x08 \x03(\x02\x42\x02\x10\x00\x12\x14\n\x0cstring_array\x18\t \x03(\t\"V\n\x15\x45xecuteServiceRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12%\n\x04\x61rgs\x18\x02 \x03(\x0b\x32\x17.ExecuteServiceArgument:\t\xe0@*\xe8@\x02\x80\x41\x01\"x\n\x1aListEntitiesCameraResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t:\x19\xe0@+\xe8@\x01\xf2@\x10USE_ESP32_CAMERA\"Y\n\x13\x43\x61meraImageResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x64one\x18\x03 \x01(\x08:\x19\xe0@,\xe8@\x01\xf2@\x10USE_ESP32_CAMERA\"R\n\x12\x43\x61meraImageRequest\x12\x0e\n\x06single\x18\x01 \x01(\x08\x12\x0e\n\x06stream\x18\x02 \x01(\x08:\x1c\xe0@-\xe8@\x02\xf2@\x10USE_ESP32_CAMERA\x80\x41\x01\"\x81\x03\n\x1bListEntitiesClimateResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12$\n\x1csupports_current_temperature\x18\x05 \x01(\x08\x12-\n%supports_two_point_target_temperature\x18\x06 \x01(\x08\x12%\n\x0fsupported_modes\x18\x07 \x03(\x0e\x32\x0c.ClimateMode\x12\x1e\n\x16visual_min_temperature\x18\x08 \x01(\x02\x12\x1e\n\x16visual_max_temperature\x18\t \x01(\x02\x12\x1f\n\x17visual_temperature_step\x18\n \x01(\x02\x12\x15\n\rsupports_away\x18\x0b \x01(\x08\x12\x17\n\x0fsupports_action\x18\x0c \x01(\x08:\x14\xe0@.\xe8@\x01\xf2@\x0bUSE_CLIMATE\"\x80\x02\n\x14\x43limateStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x1a\n\x04mode\x18\x02 \x01(\x0e\x32\x0c.ClimateMode\x12\x1b\n\x13\x63urrent_temperature\x18\x03 \x01(\x02\x12\x1a\n\x12target_temperature\x18\x04 \x01(\x02\x12\x1e\n\x16target_temperature_low\x18\x05 \x01(\x02\x12\x1f\n\x17target_temperature_high\x18\x06 \x01(\x02\x12\x0c\n\x04\x61way\x18\x07 \x01(\x08\x12\x1e\n\x06\x61\x63tion\x18\x08 \x01(\x0e\x32\x0e.ClimateAction:\x17\xe0@/\xe8@\x01\xf2@\x0bUSE_CLIMATE\x80\x41\x01\"\xd1\x02\n\x15\x43limateCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x10\n\x08has_mode\x18\x02 \x01(\x08\x12\x1a\n\x04mode\x18\x03 \x01(\x0e\x32\x0c.ClimateMode\x12\x1e\n\x16has_target_temperature\x18\x04 \x01(\x08\x12\x1a\n\x12target_temperature\x18\x05 \x01(\x02\x12\"\n\x1ahas_target_temperature_low\x18\x06 \x01(\x08\x12\x1e\n\x16target_temperature_low\x18\x07 \x01(\x02\x12#\n\x1bhas_target_temperature_high\x18\x08 \x01(\x08\x12\x1f\n\x17target_temperature_high\x18\t \x01(\x02\x12\x10\n\x08has_away\x18\n \x01(\x08\x12\x0c\n\x04\x61way\x18\x0b \x01(\x08:\x17\xe0@0\xe8@\x02\xf2@\x0bUSE_CLIMATE\x80\x41\x01*N\n\x10LegacyCoverState\x12\x1b\n\x17LEGACY_COVER_STATE_OPEN\x10\x00\x12\x1d\n\x19LEGACY_COVER_STATE_CLOSED\x10\x01*j\n\x0e\x43overOperation\x12\x18\n\x14\x43OVER_OPERATION_IDLE\x10\x00\x12\x1e\n\x1a\x43OVER_OPERATION_IS_OPENING\x10\x01\x12\x1e\n\x1a\x43OVER_OPERATION_IS_CLOSING\x10\x02*r\n\x12LegacyCoverCommand\x12\x1d\n\x19LEGACY_COVER_COMMAND_OPEN\x10\x00\x12\x1e\n\x1aLEGACY_COVER_COMMAND_CLOSE\x10\x01\x12\x1d\n\x19LEGACY_COVER_COMMAND_STOP\x10\x02*G\n\x08\x46\x61nSpeed\x12\x11\n\rFAN_SPEED_LOW\x10\x00\x12\x14\n\x10\x46\x41N_SPEED_MEDIUM\x10\x01\x12\x12\n\x0e\x46\x41N_SPEED_HIGH\x10\x02*\xa3\x01\n\x08LogLevel\x12\x12\n\x0eLOG_LEVEL_NONE\x10\x00\x12\x13\n\x0fLOG_LEVEL_ERROR\x10\x01\x12\x12\n\x0eLOG_LEVEL_WARN\x10\x02\x12\x12\n\x0eLOG_LEVEL_INFO\x10\x03\x12\x13\n\x0fLOG_LEVEL_DEBUG\x10\x04\x12\x15\n\x11LOG_LEVEL_VERBOSE\x10\x05\x12\x1a\n\x16LOG_LEVEL_VERY_VERBOSE\x10\x06*\x84\x02\n\x0eServiceArgType\x12\x19\n\x15SERVICE_ARG_TYPE_BOOL\x10\x00\x12\x18\n\x14SERVICE_ARG_TYPE_INT\x10\x01\x12\x1a\n\x16SERVICE_ARG_TYPE_FLOAT\x10\x02\x12\x1b\n\x17SERVICE_ARG_TYPE_STRING\x10\x03\x12\x1f\n\x1bSERVICE_ARG_TYPE_BOOL_ARRAY\x10\x04\x12\x1e\n\x1aSERVICE_ARG_TYPE_INT_ARRAY\x10\x05\x12 \n\x1cSERVICE_ARG_TYPE_FLOAT_ARRAY\x10\x06\x12!\n\x1dSERVICE_ARG_TYPE_STRING_ARRAY\x10\x07*h\n\x0b\x43limateMode\x12\x14\n\x10\x43LIMATE_MODE_OFF\x10\x00\x12\x15\n\x11\x43LIMATE_MODE_AUTO\x10\x01\x12\x15\n\x11\x43LIMATE_MODE_COOL\x10\x02\x12\x15\n\x11\x43LIMATE_MODE_HEAT\x10\x03*_\n\rClimateAction\x12\x16\n\x12\x43LIMATE_ACTION_OFF\x10\x00\x12\x1a\n\x16\x43LIMATE_ACTION_COOLING\x10\x02\x12\x1a\n\x16\x43LIMATE_ACTION_HEATING\x10\x03\x32\xe5\x07\n\rAPIConnection\x12.\n\x05hello\x12\r.HelloRequest\x1a\x0e.HelloResponse\"\x06\xf0@\x00\xf8@\x00\x12\x34\n\x07\x63onnect\x12\x0f.ConnectRequest\x1a\x10.ConnectResponse\"\x06\xf0@\x00\xf8@\x00\x12=\n\ndisconnect\x12\x12.DisconnectRequest\x1a\x13.DisconnectResponse\"\x06\xf0@\x00\xf8@\x00\x12+\n\x04ping\x12\x0c.PingRequest\x1a\r.PingResponse\"\x06\xf0@\x00\xf8@\x00\x12;\n\x0b\x64\x65vice_info\x12\x12.DeviceInfoRequest\x1a\x13.DeviceInfoResponse\"\x03\xf8@\x00\x12.\n\rlist_entities\x12\x14.ListEntitiesRequest\x1a\x05.void\"\x00\x12\x34\n\x10subscribe_states\x12\x17.SubscribeStatesRequest\x1a\x05.void\"\x00\x12\x30\n\x0esubscribe_logs\x12\x15.SubscribeLogsRequest\x1a\x05.void\"\x00\x12S\n subscribe_homeassistant_services\x12&.SubscribeHomeassistantServicesRequest\x1a\x05.void\"\x00\x12P\n\x1fsubscribe_home_assistant_states\x12$.SubscribeHomeAssistantStatesRequest\x1a\x05.void\"\x00\x12\x32\n\x08get_time\x12\x0f.GetTimeRequest\x1a\x10.GetTimeResponse\"\x03\xf8@\x00\x12\x32\n\x0f\x65xecute_service\x12\x16.ExecuteServiceRequest\x1a\x05.void\"\x00\x12.\n\rcover_command\x12\x14.CoverCommandRequest\x1a\x05.void\"\x00\x12*\n\x0b\x66\x61n_command\x12\x12.FanCommandRequest\x1a\x05.void\"\x00\x12.\n\rlight_command\x12\x14.LightCommandRequest\x1a\x05.void\"\x00\x12\x30\n\x0eswitch_command\x12\x15.SwitchCommandRequest\x1a\x05.void\"\x00\x12,\n\x0c\x63\x61mera_image\x12\x13.CameraImageRequest\x1a\x05.void\"\x00\x12\x32\n\x0f\x63limate_command\x12\x16.ClimateCommandRequest\x1a\x05.void\"\x00\x62\x06proto3') + serialized_pb=_b('\n\tapi.proto\x1a\x11\x61pi_options.proto\".\n\x0cHelloRequest\x12\x13\n\x0b\x63lient_info\x18\x01 \x01(\t:\t\xe0@\x01\xe8@\x02\x80\x41\x01\"e\n\rHelloResponse\x12\x19\n\x11\x61pi_version_major\x18\x01 \x01(\r\x12\x19\n\x11\x61pi_version_minor\x18\x02 \x01(\r\x12\x13\n\x0bserver_info\x18\x03 \x01(\t:\t\xe0@\x02\xe8@\x01\x80\x41\x01\"-\n\x0e\x43onnectRequest\x12\x10\n\x08password\x18\x01 \x01(\t:\t\xe0@\x03\xe8@\x02\x80\x41\x01\"6\n\x0f\x43onnectResponse\x12\x18\n\x10invalid_password\x18\x01 \x01(\x08:\t\xe0@\x04\xe8@\x01\x80\x41\x01\"\x1e\n\x11\x44isconnectRequest:\t\xe0@\x05\xe8@\x00\x80\x41\x01\"\x1f\n\x12\x44isconnectResponse:\t\xe0@\x06\xe8@\x00\x80\x41\x01\"\x15\n\x0bPingRequest:\x06\xe0@\x07\xe8@\x00\"\x16\n\x0cPingResponse:\x06\xe0@\x08\xe8@\x00\"\x1b\n\x11\x44\x65viceInfoRequest:\x06\xe0@\t\xe8@\x02\"\xb0\x01\n\x12\x44\x65viceInfoResponse\x12\x15\n\ruses_password\x18\x01 \x01(\x08\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0bmac_address\x18\x03 \x01(\t\x12\x17\n\x0f\x65sphome_version\x18\x04 \x01(\t\x12\x18\n\x10\x63ompilation_time\x18\x05 \x01(\t\x12\r\n\x05model\x18\x06 \x01(\t\x12\x16\n\x0ehas_deep_sleep\x18\x07 \x01(\x08:\x06\xe0@\n\xe8@\x01\"\x1d\n\x13ListEntitiesRequest:\x06\xe0@\x0b\xe8@\x02\"%\n\x18ListEntitiesDoneResponse:\t\xe0@\x13\xe8@\x01\x80\x41\x01\" \n\x16SubscribeStatesRequest:\x06\xe0@\x14\xe8@\x02\"\xb6\x01\n ListEntitiesBinarySensorResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x14\n\x0c\x64\x65vice_class\x18\x05 \x01(\t\x12\x1f\n\x17is_status_binary_sensor\x18\x06 \x01(\x08:\x1a\xe0@\x0c\xe8@\x01\xf2@\x11USE_BINARY_SENSOR\"m\n\x19\x42inarySensorStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08\x12\x15\n\rmissing_state\x18\x03 \x01(\x08:\x1d\xe0@\x15\xe8@\x01\xf2@\x11USE_BINARY_SENSOR\x80\x41\x01\"\xcf\x01\n\x19ListEntitiesCoverResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x15\n\rassumed_state\x18\x05 \x01(\x08\x12\x19\n\x11supports_position\x18\x06 \x01(\x08\x12\x15\n\rsupports_tilt\x18\x07 \x01(\x08\x12\x14\n\x0c\x64\x65vice_class\x18\x08 \x01(\t:\x12\xe0@\r\xe8@\x01\xf2@\tUSE_COVER\"\xad\x01\n\x12\x43overStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\'\n\x0clegacy_state\x18\x02 \x01(\x0e\x32\x11.LegacyCoverState\x12\x10\n\x08position\x18\x03 \x01(\x02\x12\x0c\n\x04tilt\x18\x04 \x01(\x02\x12*\n\x11\x63urrent_operation\x18\x05 \x01(\x0e\x32\x0f.CoverOperation:\x15\xe0@\x16\xe8@\x01\xf2@\tUSE_COVER\x80\x41\x01\"\xd8\x01\n\x13\x43overCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x1a\n\x12has_legacy_command\x18\x02 \x01(\x08\x12+\n\x0elegacy_command\x18\x03 \x01(\x0e\x32\x13.LegacyCoverCommand\x12\x14\n\x0chas_position\x18\x04 \x01(\x08\x12\x10\n\x08position\x18\x05 \x01(\x02\x12\x10\n\x08has_tilt\x18\x06 \x01(\x08\x12\x0c\n\x04tilt\x18\x07 \x01(\x02\x12\x0c\n\x04stop\x18\x08 \x01(\x08:\x15\xe0@\x1e\xe8@\x02\xf2@\tUSE_COVER\x80\x41\x01\"\xa2\x01\n\x17ListEntitiesFanResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x1c\n\x14supports_oscillation\x18\x05 \x01(\x08\x12\x16\n\x0esupports_speed\x18\x06 \x01(\x08:\x10\xe0@\x0e\xe8@\x01\xf2@\x07USE_FAN\"r\n\x10\x46\x61nStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08\x12\x13\n\x0boscillating\x18\x03 \x01(\x08\x12\x18\n\x05speed\x18\x04 \x01(\x0e\x32\t.FanSpeed:\x13\xe0@\x17\xe8@\x01\xf2@\x07USE_FAN\x80\x41\x01\"\xb2\x01\n\x11\x46\x61nCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x11\n\thas_state\x18\x02 \x01(\x08\x12\r\n\x05state\x18\x03 \x01(\x08\x12\x11\n\thas_speed\x18\x04 \x01(\x08\x12\x18\n\x05speed\x18\x05 \x01(\x0e\x32\t.FanSpeed\x12\x17\n\x0fhas_oscillating\x18\x06 \x01(\x08\x12\x13\n\x0boscillating\x18\x07 \x01(\x08:\x13\xe0@\x1f\xe8@\x02\xf2@\x07USE_FAN\x80\x41\x01\"\x9e\x02\n\x19ListEntitiesLightResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x1b\n\x13supports_brightness\x18\x05 \x01(\x08\x12\x14\n\x0csupports_rgb\x18\x06 \x01(\x08\x12\x1c\n\x14supports_white_value\x18\x07 \x01(\x08\x12\"\n\x1asupports_color_temperature\x18\x08 \x01(\x08\x12\x12\n\nmin_mireds\x18\t \x01(\x02\x12\x12\n\nmax_mireds\x18\n \x01(\x02\x12\x0f\n\x07\x65\x66\x66\x65\x63ts\x18\x0b \x03(\t:\x12\xe0@\x0f\xe8@\x01\xf2@\tUSE_LIGHT\"\xbf\x01\n\x12LightStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08\x12\x12\n\nbrightness\x18\x03 \x01(\x02\x12\x0b\n\x03red\x18\x04 \x01(\x02\x12\r\n\x05green\x18\x05 \x01(\x02\x12\x0c\n\x04\x62lue\x18\x06 \x01(\x02\x12\r\n\x05white\x18\x07 \x01(\x02\x12\x19\n\x11\x63olor_temperature\x18\x08 \x01(\x02\x12\x0e\n\x06\x65\x66\x66\x65\x63t\x18\t \x01(\t:\x15\xe0@\x18\xe8@\x01\xf2@\tUSE_LIGHT\x80\x41\x01\"\xac\x03\n\x13LightCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x11\n\thas_state\x18\x02 \x01(\x08\x12\r\n\x05state\x18\x03 \x01(\x08\x12\x16\n\x0ehas_brightness\x18\x04 \x01(\x08\x12\x12\n\nbrightness\x18\x05 \x01(\x02\x12\x0f\n\x07has_rgb\x18\x06 \x01(\x08\x12\x0b\n\x03red\x18\x07 \x01(\x02\x12\r\n\x05green\x18\x08 \x01(\x02\x12\x0c\n\x04\x62lue\x18\t \x01(\x02\x12\x11\n\thas_white\x18\n \x01(\x08\x12\r\n\x05white\x18\x0b \x01(\x02\x12\x1d\n\x15has_color_temperature\x18\x0c \x01(\x08\x12\x19\n\x11\x63olor_temperature\x18\r \x01(\x02\x12\x1d\n\x15has_transition_length\x18\x0e \x01(\x08\x12\x19\n\x11transition_length\x18\x0f \x01(\r\x12\x18\n\x10has_flash_length\x18\x10 \x01(\x08\x12\x14\n\x0c\x66lash_length\x18\x11 \x01(\r\x12\x12\n\nhas_effect\x18\x12 \x01(\x08\x12\x0e\n\x06\x65\x66\x66\x65\x63t\x18\x13 \x01(\t:\x15\xe0@ \xe8@\x02\xf2@\tUSE_LIGHT\x80\x41\x01\"\xce\x01\n\x1aListEntitiesSensorResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x0c\n\x04icon\x18\x05 \x01(\t\x12\x1b\n\x13unit_of_measurement\x18\x06 \x01(\t\x12\x19\n\x11\x61\x63\x63uracy_decimals\x18\x07 \x01(\x05\x12\x14\n\x0c\x66orce_update\x18\x08 \x01(\x08:\x13\xe0@\x10\xe8@\x01\xf2@\nUSE_SENSOR\"`\n\x13SensorStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x02\x12\x15\n\rmissing_state\x18\x03 \x01(\x08:\x16\xe0@\x19\xe8@\x01\xf2@\nUSE_SENSOR\x80\x41\x01\"\x97\x01\n\x1aListEntitiesSwitchResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x0c\n\x04icon\x18\x05 \x01(\t\x12\x15\n\rassumed_state\x18\x06 \x01(\x08:\x13\xe0@\x11\xe8@\x01\xf2@\nUSE_SWITCH\"I\n\x13SwitchStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08:\x16\xe0@\x1a\xe8@\x01\xf2@\nUSE_SWITCH\x80\x41\x01\"J\n\x14SwitchCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08:\x16\xe0@!\xe8@\x02\xf2@\nUSE_SWITCH\x80\x41\x01\"\x89\x01\n\x1eListEntitiesTextSensorResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12\x0c\n\x04icon\x18\x05 \x01(\t:\x18\xe0@\x12\xe8@\x01\xf2@\x0fUSE_TEXT_SENSOR\"i\n\x17TextSensorStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\t\x12\x15\n\rmissing_state\x18\x03 \x01(\x08:\x1b\xe0@\x1b\xe8@\x01\xf2@\x0fUSE_TEXT_SENSOR\x80\x41\x01\"M\n\x14SubscribeLogsRequest\x12\x18\n\x05level\x18\x01 \x01(\x0e\x32\t.LogLevel\x12\x13\n\x0b\x64ump_config\x18\x02 \x01(\x08:\x06\xe0@\x1c\xe8@\x02\"r\n\x15SubscribeLogsResponse\x12\x18\n\x05level\x18\x01 \x01(\x0e\x32\t.LogLevel\x12\x0b\n\x03tag\x18\x02 \x01(\t\x12\x0f\n\x07message\x18\x03 \x01(\t\x12\x13\n\x0bsend_failed\x18\x04 \x01(\x08:\x0c\xe0@\x1d\xe8@\x01\xf8@\x00\x80\x41\x00\"/\n%SubscribeHomeassistantServicesRequest:\x06\xe0@\"\xe8@\x02\"5\n\x17HomeassistantServiceMap\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xd2\x01\n\x1cHomeassistantServiceResponse\x12\x0f\n\x07service\x18\x01 \x01(\t\x12&\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32\x18.HomeassistantServiceMap\x12/\n\rdata_template\x18\x03 \x03(\x0b\x32\x18.HomeassistantServiceMap\x12+\n\tvariables\x18\x04 \x03(\x0b\x32\x18.HomeassistantServiceMap\x12\x10\n\x08is_event\x18\x05 \x01(\x08:\t\xe0@#\xe8@\x01\x80\x41\x01\"-\n#SubscribeHomeAssistantStatesRequest:\x06\xe0@&\xe8@\x02\"@\n#SubscribeHomeAssistantStateResponse\x12\x11\n\tentity_id\x18\x01 \x01(\t:\x06\xe0@\'\xe8@\x01\"I\n\x1aHomeAssistantStateResponse\x12\x11\n\tentity_id\x18\x01 \x01(\t\x12\r\n\x05state\x18\x02 \x01(\t:\t\xe0@(\xe8@\x02\x80\x41\x01\"\x18\n\x0eGetTimeRequest:\x06\xe0@$\xe8@\x00\"3\n\x0fGetTimeResponse\x12\x15\n\repoch_seconds\x18\x01 \x01(\x07:\t\xe0@%\xe8@\x00\x80\x41\x01\"K\n\x1cListEntitiesServicesArgument\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\x04type\x18\x02 \x01(\x0e\x32\x0f.ServiceArgType\"n\n\x1cListEntitiesServicesResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12+\n\x04\x61rgs\x18\x03 \x03(\x0b\x32\x1d.ListEntitiesServicesArgument:\x06\xe0@)\xe8@\x01\"\xc8\x01\n\x16\x45xecuteServiceArgument\x12\r\n\x05\x62ool_\x18\x01 \x01(\x08\x12\x12\n\nlegacy_int\x18\x02 \x01(\x05\x12\x0e\n\x06\x66loat_\x18\x03 \x01(\x02\x12\x0f\n\x07string_\x18\x04 \x01(\t\x12\x0c\n\x04int_\x18\x05 \x01(\x11\x12\x16\n\nbool_array\x18\x06 \x03(\x08\x42\x02\x10\x00\x12\x15\n\tint_array\x18\x07 \x03(\x11\x42\x02\x10\x00\x12\x17\n\x0b\x66loat_array\x18\x08 \x03(\x02\x42\x02\x10\x00\x12\x14\n\x0cstring_array\x18\t \x03(\t\"V\n\x15\x45xecuteServiceRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12%\n\x04\x61rgs\x18\x02 \x03(\x0b\x32\x17.ExecuteServiceArgument:\t\xe0@*\xe8@\x02\x80\x41\x01\"x\n\x1aListEntitiesCameraResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t:\x19\xe0@+\xe8@\x01\xf2@\x10USE_ESP32_CAMERA\"Y\n\x13\x43\x61meraImageResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x64one\x18\x03 \x01(\x08:\x19\xe0@,\xe8@\x01\xf2@\x10USE_ESP32_CAMERA\"R\n\x12\x43\x61meraImageRequest\x12\x0e\n\x06single\x18\x01 \x01(\x08\x12\x0e\n\x06stream\x18\x02 \x01(\x08:\x1c\xe0@-\xe8@\x02\xf2@\x10USE_ESP32_CAMERA\x80\x41\x01\"\xe1\x03\n\x1bListEntitiesClimateResponse\x12\x11\n\tobject_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tunique_id\x18\x04 \x01(\t\x12$\n\x1csupports_current_temperature\x18\x05 \x01(\x08\x12-\n%supports_two_point_target_temperature\x18\x06 \x01(\x08\x12%\n\x0fsupported_modes\x18\x07 \x03(\x0e\x32\x0c.ClimateMode\x12\x1e\n\x16visual_min_temperature\x18\x08 \x01(\x02\x12\x1e\n\x16visual_max_temperature\x18\t \x01(\x02\x12\x1f\n\x17visual_temperature_step\x18\n \x01(\x02\x12\x15\n\rsupports_away\x18\x0b \x01(\x08\x12\x17\n\x0fsupports_action\x18\x0c \x01(\x08\x12,\n\x13supported_fan_modes\x18\r \x03(\x0e\x32\x0f.ClimateFanMode\x12\x30\n\x15supported_swing_modes\x18\x0e \x03(\x0e\x32\x11.ClimateSwingMode:\x14\xe0@.\xe8@\x01\xf2@\x0bUSE_CLIMATE\"\xca\x02\n\x14\x43limateStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x1a\n\x04mode\x18\x02 \x01(\x0e\x32\x0c.ClimateMode\x12\x1b\n\x13\x63urrent_temperature\x18\x03 \x01(\x02\x12\x1a\n\x12target_temperature\x18\x04 \x01(\x02\x12\x1e\n\x16target_temperature_low\x18\x05 \x01(\x02\x12\x1f\n\x17target_temperature_high\x18\x06 \x01(\x02\x12\x0c\n\x04\x61way\x18\x07 \x01(\x08\x12\x1e\n\x06\x61\x63tion\x18\x08 \x01(\x0e\x32\x0e.ClimateAction\x12!\n\x08\x66\x61n_mode\x18\t \x01(\x0e\x32\x0f.ClimateFanMode\x12%\n\nswing_mode\x18\n \x01(\x0e\x32\x11.ClimateSwingMode:\x17\xe0@/\xe8@\x01\xf2@\x0bUSE_CLIMATE\x80\x41\x01\"\xc9\x03\n\x15\x43limateCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x10\n\x08has_mode\x18\x02 \x01(\x08\x12\x1a\n\x04mode\x18\x03 \x01(\x0e\x32\x0c.ClimateMode\x12\x1e\n\x16has_target_temperature\x18\x04 \x01(\x08\x12\x1a\n\x12target_temperature\x18\x05 \x01(\x02\x12\"\n\x1ahas_target_temperature_low\x18\x06 \x01(\x08\x12\x1e\n\x16target_temperature_low\x18\x07 \x01(\x02\x12#\n\x1bhas_target_temperature_high\x18\x08 \x01(\x08\x12\x1f\n\x17target_temperature_high\x18\t \x01(\x02\x12\x10\n\x08has_away\x18\n \x01(\x08\x12\x0c\n\x04\x61way\x18\x0b \x01(\x08\x12\x14\n\x0chas_fan_mode\x18\x0c \x01(\x08\x12!\n\x08\x66\x61n_mode\x18\r \x01(\x0e\x32\x0f.ClimateFanMode\x12\x16\n\x0ehas_swing_mode\x18\x0e \x01(\x08\x12%\n\nswing_mode\x18\x0f \x01(\x0e\x32\x11.ClimateSwingMode:\x17\xe0@0\xe8@\x02\xf2@\x0bUSE_CLIMATE\x80\x41\x01*N\n\x10LegacyCoverState\x12\x1b\n\x17LEGACY_COVER_STATE_OPEN\x10\x00\x12\x1d\n\x19LEGACY_COVER_STATE_CLOSED\x10\x01*j\n\x0e\x43overOperation\x12\x18\n\x14\x43OVER_OPERATION_IDLE\x10\x00\x12\x1e\n\x1a\x43OVER_OPERATION_IS_OPENING\x10\x01\x12\x1e\n\x1a\x43OVER_OPERATION_IS_CLOSING\x10\x02*r\n\x12LegacyCoverCommand\x12\x1d\n\x19LEGACY_COVER_COMMAND_OPEN\x10\x00\x12\x1e\n\x1aLEGACY_COVER_COMMAND_CLOSE\x10\x01\x12\x1d\n\x19LEGACY_COVER_COMMAND_STOP\x10\x02*G\n\x08\x46\x61nSpeed\x12\x11\n\rFAN_SPEED_LOW\x10\x00\x12\x14\n\x10\x46\x41N_SPEED_MEDIUM\x10\x01\x12\x12\n\x0e\x46\x41N_SPEED_HIGH\x10\x02*\xa3\x01\n\x08LogLevel\x12\x12\n\x0eLOG_LEVEL_NONE\x10\x00\x12\x13\n\x0fLOG_LEVEL_ERROR\x10\x01\x12\x12\n\x0eLOG_LEVEL_WARN\x10\x02\x12\x12\n\x0eLOG_LEVEL_INFO\x10\x03\x12\x13\n\x0fLOG_LEVEL_DEBUG\x10\x04\x12\x15\n\x11LOG_LEVEL_VERBOSE\x10\x05\x12\x1a\n\x16LOG_LEVEL_VERY_VERBOSE\x10\x06*\x84\x02\n\x0eServiceArgType\x12\x19\n\x15SERVICE_ARG_TYPE_BOOL\x10\x00\x12\x18\n\x14SERVICE_ARG_TYPE_INT\x10\x01\x12\x1a\n\x16SERVICE_ARG_TYPE_FLOAT\x10\x02\x12\x1b\n\x17SERVICE_ARG_TYPE_STRING\x10\x03\x12\x1f\n\x1bSERVICE_ARG_TYPE_BOOL_ARRAY\x10\x04\x12\x1e\n\x1aSERVICE_ARG_TYPE_INT_ARRAY\x10\x05\x12 \n\x1cSERVICE_ARG_TYPE_FLOAT_ARRAY\x10\x06\x12!\n\x1dSERVICE_ARG_TYPE_STRING_ARRAY\x10\x07*\x99\x01\n\x0b\x43limateMode\x12\x14\n\x10\x43LIMATE_MODE_OFF\x10\x00\x12\x15\n\x11\x43LIMATE_MODE_AUTO\x10\x01\x12\x15\n\x11\x43LIMATE_MODE_COOL\x10\x02\x12\x15\n\x11\x43LIMATE_MODE_HEAT\x10\x03\x12\x19\n\x15\x43LIMATE_MODE_FAN_ONLY\x10\x04\x12\x14\n\x10\x43LIMATE_MODE_DRY\x10\x05*\xda\x01\n\x0e\x43limateFanMode\x12\x12\n\x0e\x43LIMATE_FAN_ON\x10\x00\x12\x13\n\x0f\x43LIMATE_FAN_OFF\x10\x01\x12\x14\n\x10\x43LIMATE_FAN_AUTO\x10\x02\x12\x13\n\x0f\x43LIMATE_FAN_LOW\x10\x03\x12\x16\n\x12\x43LIMATE_FAN_MEDIUM\x10\x04\x12\x14\n\x10\x43LIMATE_FAN_HIGH\x10\x05\x12\x16\n\x12\x43LIMATE_FAN_MIDDLE\x10\x06\x12\x15\n\x11\x43LIMATE_FAN_FOCUS\x10\x07\x12\x17\n\x13\x43LIMATE_FAN_DIFFUSE\x10\x08*{\n\x10\x43limateSwingMode\x12\x15\n\x11\x43LIMATE_SWING_OFF\x10\x00\x12\x16\n\x12\x43LIMATE_SWING_BOTH\x10\x01\x12\x1a\n\x16\x43LIMATE_SWING_VERTICAL\x10\x02\x12\x1c\n\x18\x43LIMATE_SWINT_HORIZONTAL\x10\x03*_\n\rClimateAction\x12\x16\n\x12\x43LIMATE_ACTION_OFF\x10\x00\x12\x1a\n\x16\x43LIMATE_ACTION_COOLING\x10\x02\x12\x1a\n\x16\x43LIMATE_ACTION_HEATING\x10\x03\x32\xe5\x07\n\rAPIConnection\x12.\n\x05hello\x12\r.HelloRequest\x1a\x0e.HelloResponse\"\x06\xf0@\x00\xf8@\x00\x12\x34\n\x07\x63onnect\x12\x0f.ConnectRequest\x1a\x10.ConnectResponse\"\x06\xf0@\x00\xf8@\x00\x12=\n\ndisconnect\x12\x12.DisconnectRequest\x1a\x13.DisconnectResponse\"\x06\xf0@\x00\xf8@\x00\x12+\n\x04ping\x12\x0c.PingRequest\x1a\r.PingResponse\"\x06\xf0@\x00\xf8@\x00\x12;\n\x0b\x64\x65vice_info\x12\x12.DeviceInfoRequest\x1a\x13.DeviceInfoResponse\"\x03\xf8@\x00\x12.\n\rlist_entities\x12\x14.ListEntitiesRequest\x1a\x05.void\"\x00\x12\x34\n\x10subscribe_states\x12\x17.SubscribeStatesRequest\x1a\x05.void\"\x00\x12\x30\n\x0esubscribe_logs\x12\x15.SubscribeLogsRequest\x1a\x05.void\"\x00\x12S\n subscribe_homeassistant_services\x12&.SubscribeHomeassistantServicesRequest\x1a\x05.void\"\x00\x12P\n\x1fsubscribe_home_assistant_states\x12$.SubscribeHomeAssistantStatesRequest\x1a\x05.void\"\x00\x12\x32\n\x08get_time\x12\x0f.GetTimeRequest\x1a\x10.GetTimeResponse\"\x03\xf8@\x00\x12\x32\n\x0f\x65xecute_service\x12\x16.ExecuteServiceRequest\x1a\x05.void\"\x00\x12.\n\rcover_command\x12\x14.CoverCommandRequest\x1a\x05.void\"\x00\x12*\n\x0b\x66\x61n_command\x12\x12.FanCommandRequest\x1a\x05.void\"\x00\x12.\n\rlight_command\x12\x14.LightCommandRequest\x1a\x05.void\"\x00\x12\x30\n\x0eswitch_command\x12\x15.SwitchCommandRequest\x1a\x05.void\"\x00\x12,\n\x0c\x63\x61mera_image\x12\x13.CameraImageRequest\x1a\x05.void\"\x00\x12\x32\n\x0f\x63limate_command\x12\x16.ClimateCommandRequest\x1a\x05.void\"\x00\x62\x06proto3') , dependencies=[api__options__pb2.DESCRIPTOR,]) @@ -43,8 +42,8 @@ _LEGACYCOVERSTATE = _descriptor.EnumDescriptor( ], containing_type=None, serialized_options=None, - serialized_start=6389, - serialized_end=6467, + serialized_start=6679, + serialized_end=6757, ) _sym_db.RegisterEnumDescriptor(_LEGACYCOVERSTATE) @@ -70,8 +69,8 @@ _COVEROPERATION = _descriptor.EnumDescriptor( ], containing_type=None, serialized_options=None, - serialized_start=6469, - serialized_end=6575, + serialized_start=6759, + serialized_end=6865, ) _sym_db.RegisterEnumDescriptor(_COVEROPERATION) @@ -97,8 +96,8 @@ _LEGACYCOVERCOMMAND = _descriptor.EnumDescriptor( ], containing_type=None, serialized_options=None, - serialized_start=6577, - serialized_end=6691, + serialized_start=6867, + serialized_end=6981, ) _sym_db.RegisterEnumDescriptor(_LEGACYCOVERCOMMAND) @@ -124,8 +123,8 @@ _FANSPEED = _descriptor.EnumDescriptor( ], containing_type=None, serialized_options=None, - serialized_start=6693, - serialized_end=6764, + serialized_start=6983, + serialized_end=7054, ) _sym_db.RegisterEnumDescriptor(_FANSPEED) @@ -167,8 +166,8 @@ _LOGLEVEL = _descriptor.EnumDescriptor( ], containing_type=None, serialized_options=None, - serialized_start=6767, - serialized_end=6930, + serialized_start=7057, + serialized_end=7220, ) _sym_db.RegisterEnumDescriptor(_LOGLEVEL) @@ -214,8 +213,8 @@ _SERVICEARGTYPE = _descriptor.EnumDescriptor( ], containing_type=None, serialized_options=None, - serialized_start=6933, - serialized_end=7193, + serialized_start=7223, + serialized_end=7483, ) _sym_db.RegisterEnumDescriptor(_SERVICEARGTYPE) @@ -242,15 +241,105 @@ _CLIMATEMODE = _descriptor.EnumDescriptor( name='CLIMATE_MODE_HEAT', index=3, number=3, serialized_options=None, type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_MODE_FAN_ONLY', index=4, number=4, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_MODE_DRY', index=5, number=5, + serialized_options=None, + type=None), ], containing_type=None, serialized_options=None, - serialized_start=7195, - serialized_end=7299, + serialized_start=7486, + serialized_end=7639, ) _sym_db.RegisterEnumDescriptor(_CLIMATEMODE) ClimateMode = enum_type_wrapper.EnumTypeWrapper(_CLIMATEMODE) +_CLIMATEFANMODE = _descriptor.EnumDescriptor( + name='ClimateFanMode', + full_name='ClimateFanMode', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='CLIMATE_FAN_ON', index=0, number=0, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_FAN_OFF', index=1, number=1, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_FAN_AUTO', index=2, number=2, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_FAN_LOW', index=3, number=3, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_FAN_MEDIUM', index=4, number=4, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_FAN_HIGH', index=5, number=5, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_FAN_MIDDLE', index=6, number=6, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_FAN_FOCUS', index=7, number=7, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_FAN_DIFFUSE', index=8, number=8, + serialized_options=None, + type=None), + ], + containing_type=None, + serialized_options=None, + serialized_start=7642, + serialized_end=7860, +) +_sym_db.RegisterEnumDescriptor(_CLIMATEFANMODE) + +ClimateFanMode = enum_type_wrapper.EnumTypeWrapper(_CLIMATEFANMODE) +_CLIMATESWINGMODE = _descriptor.EnumDescriptor( + name='ClimateSwingMode', + full_name='ClimateSwingMode', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='CLIMATE_SWING_OFF', index=0, number=0, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_SWING_BOTH', index=1, number=1, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_SWING_VERTICAL', index=2, number=2, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CLIMATE_SWINT_HORIZONTAL', index=3, number=3, + serialized_options=None, + type=None), + ], + containing_type=None, + serialized_options=None, + serialized_start=7862, + serialized_end=7985, +) +_sym_db.RegisterEnumDescriptor(_CLIMATESWINGMODE) + +ClimateSwingMode = enum_type_wrapper.EnumTypeWrapper(_CLIMATESWINGMODE) _CLIMATEACTION = _descriptor.EnumDescriptor( name='ClimateAction', full_name='ClimateAction', @@ -272,8 +361,8 @@ _CLIMATEACTION = _descriptor.EnumDescriptor( ], containing_type=None, serialized_options=None, - serialized_start=7301, - serialized_end=7396, + serialized_start=7987, + serialized_end=8082, ) _sym_db.RegisterEnumDescriptor(_CLIMATEACTION) @@ -308,6 +397,21 @@ CLIMATE_MODE_OFF = 0 CLIMATE_MODE_AUTO = 1 CLIMATE_MODE_COOL = 2 CLIMATE_MODE_HEAT = 3 +CLIMATE_MODE_FAN_ONLY = 4 +CLIMATE_MODE_DRY = 5 +CLIMATE_FAN_ON = 0 +CLIMATE_FAN_OFF = 1 +CLIMATE_FAN_AUTO = 2 +CLIMATE_FAN_LOW = 3 +CLIMATE_FAN_MEDIUM = 4 +CLIMATE_FAN_HIGH = 5 +CLIMATE_FAN_MIDDLE = 6 +CLIMATE_FAN_FOCUS = 7 +CLIMATE_FAN_DIFFUSE = 8 +CLIMATE_SWING_OFF = 0 +CLIMATE_SWING_BOTH = 1 +CLIMATE_SWING_VERTICAL = 2 +CLIMATE_SWINT_HORIZONTAL = 3 CLIMATE_ACTION_OFF = 0 CLIMATE_ACTION_COOLING = 2 CLIMATE_ACTION_HEATING = 3 @@ -2747,6 +2851,20 @@ _LISTENTITIESCLIMATERESPONSE = _descriptor.Descriptor( message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='supported_fan_modes', full_name='ListEntitiesClimateResponse.supported_fan_modes', index=12, + number=13, type=14, cpp_type=8, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='supported_swing_modes', full_name='ListEntitiesClimateResponse.supported_swing_modes', index=13, + number=14, type=14, cpp_type=8, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -2760,7 +2878,7 @@ _LISTENTITIESCLIMATERESPONSE = _descriptor.Descriptor( oneofs=[ ], serialized_start=5403, - serialized_end=5788, + serialized_end=5884, ) @@ -2827,6 +2945,20 @@ _CLIMATESTATERESPONSE = _descriptor.Descriptor( message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='fan_mode', full_name='ClimateStateResponse.fan_mode', index=8, + number=9, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='swing_mode', full_name='ClimateStateResponse.swing_mode', index=9, + number=10, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -2839,8 +2971,8 @@ _CLIMATESTATERESPONSE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=5791, - serialized_end=6047, + serialized_start=5887, + serialized_end=6217, ) @@ -2928,6 +3060,34 @@ _CLIMATECOMMANDREQUEST = _descriptor.Descriptor( message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='has_fan_mode', full_name='ClimateCommandRequest.has_fan_mode', index=11, + number=12, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='fan_mode', full_name='ClimateCommandRequest.fan_mode', index=12, + number=13, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='has_swing_mode', full_name='ClimateCommandRequest.has_swing_mode', index=13, + number=14, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='swing_mode', full_name='ClimateCommandRequest.swing_mode', index=14, + number=15, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -2940,8 +3100,8 @@ _CLIMATECOMMANDREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=6050, - serialized_end=6387, + serialized_start=6220, + serialized_end=6677, ) _COVERSTATERESPONSE.fields_by_name['legacy_state'].enum_type = _LEGACYCOVERSTATE @@ -2958,9 +3118,15 @@ _LISTENTITIESSERVICESARGUMENT.fields_by_name['type'].enum_type = _SERVICEARGTYPE _LISTENTITIESSERVICESRESPONSE.fields_by_name['args'].message_type = _LISTENTITIESSERVICESARGUMENT _EXECUTESERVICEREQUEST.fields_by_name['args'].message_type = _EXECUTESERVICEARGUMENT _LISTENTITIESCLIMATERESPONSE.fields_by_name['supported_modes'].enum_type = _CLIMATEMODE +_LISTENTITIESCLIMATERESPONSE.fields_by_name['supported_fan_modes'].enum_type = _CLIMATEFANMODE +_LISTENTITIESCLIMATERESPONSE.fields_by_name['supported_swing_modes'].enum_type = _CLIMATESWINGMODE _CLIMATESTATERESPONSE.fields_by_name['mode'].enum_type = _CLIMATEMODE _CLIMATESTATERESPONSE.fields_by_name['action'].enum_type = _CLIMATEACTION +_CLIMATESTATERESPONSE.fields_by_name['fan_mode'].enum_type = _CLIMATEFANMODE +_CLIMATESTATERESPONSE.fields_by_name['swing_mode'].enum_type = _CLIMATESWINGMODE _CLIMATECOMMANDREQUEST.fields_by_name['mode'].enum_type = _CLIMATEMODE +_CLIMATECOMMANDREQUEST.fields_by_name['fan_mode'].enum_type = _CLIMATEFANMODE +_CLIMATECOMMANDREQUEST.fields_by_name['swing_mode'].enum_type = _CLIMATESWINGMODE DESCRIPTOR.message_types_by_name['HelloRequest'] = _HELLOREQUEST DESCRIPTOR.message_types_by_name['HelloResponse'] = _HELLORESPONSE DESCRIPTOR.message_types_by_name['ConnectRequest'] = _CONNECTREQUEST @@ -3019,364 +3185,366 @@ DESCRIPTOR.enum_types_by_name['FanSpeed'] = _FANSPEED DESCRIPTOR.enum_types_by_name['LogLevel'] = _LOGLEVEL DESCRIPTOR.enum_types_by_name['ServiceArgType'] = _SERVICEARGTYPE DESCRIPTOR.enum_types_by_name['ClimateMode'] = _CLIMATEMODE +DESCRIPTOR.enum_types_by_name['ClimateFanMode'] = _CLIMATEFANMODE +DESCRIPTOR.enum_types_by_name['ClimateSwingMode'] = _CLIMATESWINGMODE DESCRIPTOR.enum_types_by_name['ClimateAction'] = _CLIMATEACTION _sym_db.RegisterFileDescriptor(DESCRIPTOR) -HelloRequest = _reflection.GeneratedProtocolMessageType('HelloRequest', (_message.Message,), { - 'DESCRIPTOR' : _HELLOREQUEST, - '__module__' : 'api_pb2' +HelloRequest = _reflection.GeneratedProtocolMessageType('HelloRequest', (_message.Message,), dict( + DESCRIPTOR = _HELLOREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:HelloRequest) - }) + )) _sym_db.RegisterMessage(HelloRequest) -HelloResponse = _reflection.GeneratedProtocolMessageType('HelloResponse', (_message.Message,), { - 'DESCRIPTOR' : _HELLORESPONSE, - '__module__' : 'api_pb2' +HelloResponse = _reflection.GeneratedProtocolMessageType('HelloResponse', (_message.Message,), dict( + DESCRIPTOR = _HELLORESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:HelloResponse) - }) + )) _sym_db.RegisterMessage(HelloResponse) -ConnectRequest = _reflection.GeneratedProtocolMessageType('ConnectRequest', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTREQUEST, - '__module__' : 'api_pb2' +ConnectRequest = _reflection.GeneratedProtocolMessageType('ConnectRequest', (_message.Message,), dict( + DESCRIPTOR = _CONNECTREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ConnectRequest) - }) + )) _sym_db.RegisterMessage(ConnectRequest) -ConnectResponse = _reflection.GeneratedProtocolMessageType('ConnectResponse', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTRESPONSE, - '__module__' : 'api_pb2' +ConnectResponse = _reflection.GeneratedProtocolMessageType('ConnectResponse', (_message.Message,), dict( + DESCRIPTOR = _CONNECTRESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ConnectResponse) - }) + )) _sym_db.RegisterMessage(ConnectResponse) -DisconnectRequest = _reflection.GeneratedProtocolMessageType('DisconnectRequest', (_message.Message,), { - 'DESCRIPTOR' : _DISCONNECTREQUEST, - '__module__' : 'api_pb2' +DisconnectRequest = _reflection.GeneratedProtocolMessageType('DisconnectRequest', (_message.Message,), dict( + DESCRIPTOR = _DISCONNECTREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:DisconnectRequest) - }) + )) _sym_db.RegisterMessage(DisconnectRequest) -DisconnectResponse = _reflection.GeneratedProtocolMessageType('DisconnectResponse', (_message.Message,), { - 'DESCRIPTOR' : _DISCONNECTRESPONSE, - '__module__' : 'api_pb2' +DisconnectResponse = _reflection.GeneratedProtocolMessageType('DisconnectResponse', (_message.Message,), dict( + DESCRIPTOR = _DISCONNECTRESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:DisconnectResponse) - }) + )) _sym_db.RegisterMessage(DisconnectResponse) -PingRequest = _reflection.GeneratedProtocolMessageType('PingRequest', (_message.Message,), { - 'DESCRIPTOR' : _PINGREQUEST, - '__module__' : 'api_pb2' +PingRequest = _reflection.GeneratedProtocolMessageType('PingRequest', (_message.Message,), dict( + DESCRIPTOR = _PINGREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:PingRequest) - }) + )) _sym_db.RegisterMessage(PingRequest) -PingResponse = _reflection.GeneratedProtocolMessageType('PingResponse', (_message.Message,), { - 'DESCRIPTOR' : _PINGRESPONSE, - '__module__' : 'api_pb2' +PingResponse = _reflection.GeneratedProtocolMessageType('PingResponse', (_message.Message,), dict( + DESCRIPTOR = _PINGRESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:PingResponse) - }) + )) _sym_db.RegisterMessage(PingResponse) -DeviceInfoRequest = _reflection.GeneratedProtocolMessageType('DeviceInfoRequest', (_message.Message,), { - 'DESCRIPTOR' : _DEVICEINFOREQUEST, - '__module__' : 'api_pb2' +DeviceInfoRequest = _reflection.GeneratedProtocolMessageType('DeviceInfoRequest', (_message.Message,), dict( + DESCRIPTOR = _DEVICEINFOREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:DeviceInfoRequest) - }) + )) _sym_db.RegisterMessage(DeviceInfoRequest) -DeviceInfoResponse = _reflection.GeneratedProtocolMessageType('DeviceInfoResponse', (_message.Message,), { - 'DESCRIPTOR' : _DEVICEINFORESPONSE, - '__module__' : 'api_pb2' +DeviceInfoResponse = _reflection.GeneratedProtocolMessageType('DeviceInfoResponse', (_message.Message,), dict( + DESCRIPTOR = _DEVICEINFORESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:DeviceInfoResponse) - }) + )) _sym_db.RegisterMessage(DeviceInfoResponse) -ListEntitiesRequest = _reflection.GeneratedProtocolMessageType('ListEntitiesRequest', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESREQUEST, - '__module__' : 'api_pb2' +ListEntitiesRequest = _reflection.GeneratedProtocolMessageType('ListEntitiesRequest', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesRequest) - }) + )) _sym_db.RegisterMessage(ListEntitiesRequest) -ListEntitiesDoneResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesDoneResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESDONERESPONSE, - '__module__' : 'api_pb2' +ListEntitiesDoneResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesDoneResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESDONERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesDoneResponse) - }) + )) _sym_db.RegisterMessage(ListEntitiesDoneResponse) -SubscribeStatesRequest = _reflection.GeneratedProtocolMessageType('SubscribeStatesRequest', (_message.Message,), { - 'DESCRIPTOR' : _SUBSCRIBESTATESREQUEST, - '__module__' : 'api_pb2' +SubscribeStatesRequest = _reflection.GeneratedProtocolMessageType('SubscribeStatesRequest', (_message.Message,), dict( + DESCRIPTOR = _SUBSCRIBESTATESREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:SubscribeStatesRequest) - }) + )) _sym_db.RegisterMessage(SubscribeStatesRequest) -ListEntitiesBinarySensorResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesBinarySensorResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESBINARYSENSORRESPONSE, - '__module__' : 'api_pb2' +ListEntitiesBinarySensorResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesBinarySensorResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESBINARYSENSORRESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesBinarySensorResponse) - }) + )) _sym_db.RegisterMessage(ListEntitiesBinarySensorResponse) -BinarySensorStateResponse = _reflection.GeneratedProtocolMessageType('BinarySensorStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _BINARYSENSORSTATERESPONSE, - '__module__' : 'api_pb2' +BinarySensorStateResponse = _reflection.GeneratedProtocolMessageType('BinarySensorStateResponse', (_message.Message,), dict( + DESCRIPTOR = _BINARYSENSORSTATERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:BinarySensorStateResponse) - }) + )) _sym_db.RegisterMessage(BinarySensorStateResponse) -ListEntitiesCoverResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesCoverResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESCOVERRESPONSE, - '__module__' : 'api_pb2' +ListEntitiesCoverResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesCoverResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESCOVERRESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesCoverResponse) - }) + )) _sym_db.RegisterMessage(ListEntitiesCoverResponse) -CoverStateResponse = _reflection.GeneratedProtocolMessageType('CoverStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _COVERSTATERESPONSE, - '__module__' : 'api_pb2' +CoverStateResponse = _reflection.GeneratedProtocolMessageType('CoverStateResponse', (_message.Message,), dict( + DESCRIPTOR = _COVERSTATERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:CoverStateResponse) - }) + )) _sym_db.RegisterMessage(CoverStateResponse) -CoverCommandRequest = _reflection.GeneratedProtocolMessageType('CoverCommandRequest', (_message.Message,), { - 'DESCRIPTOR' : _COVERCOMMANDREQUEST, - '__module__' : 'api_pb2' +CoverCommandRequest = _reflection.GeneratedProtocolMessageType('CoverCommandRequest', (_message.Message,), dict( + DESCRIPTOR = _COVERCOMMANDREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:CoverCommandRequest) - }) + )) _sym_db.RegisterMessage(CoverCommandRequest) -ListEntitiesFanResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesFanResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESFANRESPONSE, - '__module__' : 'api_pb2' +ListEntitiesFanResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesFanResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESFANRESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesFanResponse) - }) + )) _sym_db.RegisterMessage(ListEntitiesFanResponse) -FanStateResponse = _reflection.GeneratedProtocolMessageType('FanStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _FANSTATERESPONSE, - '__module__' : 'api_pb2' +FanStateResponse = _reflection.GeneratedProtocolMessageType('FanStateResponse', (_message.Message,), dict( + DESCRIPTOR = _FANSTATERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:FanStateResponse) - }) + )) _sym_db.RegisterMessage(FanStateResponse) -FanCommandRequest = _reflection.GeneratedProtocolMessageType('FanCommandRequest', (_message.Message,), { - 'DESCRIPTOR' : _FANCOMMANDREQUEST, - '__module__' : 'api_pb2' +FanCommandRequest = _reflection.GeneratedProtocolMessageType('FanCommandRequest', (_message.Message,), dict( + DESCRIPTOR = _FANCOMMANDREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:FanCommandRequest) - }) + )) _sym_db.RegisterMessage(FanCommandRequest) -ListEntitiesLightResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesLightResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESLIGHTRESPONSE, - '__module__' : 'api_pb2' +ListEntitiesLightResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesLightResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESLIGHTRESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesLightResponse) - }) + )) _sym_db.RegisterMessage(ListEntitiesLightResponse) -LightStateResponse = _reflection.GeneratedProtocolMessageType('LightStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _LIGHTSTATERESPONSE, - '__module__' : 'api_pb2' +LightStateResponse = _reflection.GeneratedProtocolMessageType('LightStateResponse', (_message.Message,), dict( + DESCRIPTOR = _LIGHTSTATERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:LightStateResponse) - }) + )) _sym_db.RegisterMessage(LightStateResponse) -LightCommandRequest = _reflection.GeneratedProtocolMessageType('LightCommandRequest', (_message.Message,), { - 'DESCRIPTOR' : _LIGHTCOMMANDREQUEST, - '__module__' : 'api_pb2' +LightCommandRequest = _reflection.GeneratedProtocolMessageType('LightCommandRequest', (_message.Message,), dict( + DESCRIPTOR = _LIGHTCOMMANDREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:LightCommandRequest) - }) + )) _sym_db.RegisterMessage(LightCommandRequest) -ListEntitiesSensorResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesSensorResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESSENSORRESPONSE, - '__module__' : 'api_pb2' +ListEntitiesSensorResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesSensorResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESSENSORRESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesSensorResponse) - }) + )) _sym_db.RegisterMessage(ListEntitiesSensorResponse) -SensorStateResponse = _reflection.GeneratedProtocolMessageType('SensorStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _SENSORSTATERESPONSE, - '__module__' : 'api_pb2' +SensorStateResponse = _reflection.GeneratedProtocolMessageType('SensorStateResponse', (_message.Message,), dict( + DESCRIPTOR = _SENSORSTATERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:SensorStateResponse) - }) + )) _sym_db.RegisterMessage(SensorStateResponse) -ListEntitiesSwitchResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesSwitchResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESSWITCHRESPONSE, - '__module__' : 'api_pb2' +ListEntitiesSwitchResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesSwitchResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESSWITCHRESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesSwitchResponse) - }) + )) _sym_db.RegisterMessage(ListEntitiesSwitchResponse) -SwitchStateResponse = _reflection.GeneratedProtocolMessageType('SwitchStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _SWITCHSTATERESPONSE, - '__module__' : 'api_pb2' +SwitchStateResponse = _reflection.GeneratedProtocolMessageType('SwitchStateResponse', (_message.Message,), dict( + DESCRIPTOR = _SWITCHSTATERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:SwitchStateResponse) - }) + )) _sym_db.RegisterMessage(SwitchStateResponse) -SwitchCommandRequest = _reflection.GeneratedProtocolMessageType('SwitchCommandRequest', (_message.Message,), { - 'DESCRIPTOR' : _SWITCHCOMMANDREQUEST, - '__module__' : 'api_pb2' +SwitchCommandRequest = _reflection.GeneratedProtocolMessageType('SwitchCommandRequest', (_message.Message,), dict( + DESCRIPTOR = _SWITCHCOMMANDREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:SwitchCommandRequest) - }) + )) _sym_db.RegisterMessage(SwitchCommandRequest) -ListEntitiesTextSensorResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesTextSensorResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESTEXTSENSORRESPONSE, - '__module__' : 'api_pb2' +ListEntitiesTextSensorResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesTextSensorResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESTEXTSENSORRESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesTextSensorResponse) - }) + )) _sym_db.RegisterMessage(ListEntitiesTextSensorResponse) -TextSensorStateResponse = _reflection.GeneratedProtocolMessageType('TextSensorStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _TEXTSENSORSTATERESPONSE, - '__module__' : 'api_pb2' +TextSensorStateResponse = _reflection.GeneratedProtocolMessageType('TextSensorStateResponse', (_message.Message,), dict( + DESCRIPTOR = _TEXTSENSORSTATERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:TextSensorStateResponse) - }) + )) _sym_db.RegisterMessage(TextSensorStateResponse) -SubscribeLogsRequest = _reflection.GeneratedProtocolMessageType('SubscribeLogsRequest', (_message.Message,), { - 'DESCRIPTOR' : _SUBSCRIBELOGSREQUEST, - '__module__' : 'api_pb2' +SubscribeLogsRequest = _reflection.GeneratedProtocolMessageType('SubscribeLogsRequest', (_message.Message,), dict( + DESCRIPTOR = _SUBSCRIBELOGSREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:SubscribeLogsRequest) - }) + )) _sym_db.RegisterMessage(SubscribeLogsRequest) -SubscribeLogsResponse = _reflection.GeneratedProtocolMessageType('SubscribeLogsResponse', (_message.Message,), { - 'DESCRIPTOR' : _SUBSCRIBELOGSRESPONSE, - '__module__' : 'api_pb2' +SubscribeLogsResponse = _reflection.GeneratedProtocolMessageType('SubscribeLogsResponse', (_message.Message,), dict( + DESCRIPTOR = _SUBSCRIBELOGSRESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:SubscribeLogsResponse) - }) + )) _sym_db.RegisterMessage(SubscribeLogsResponse) -SubscribeHomeassistantServicesRequest = _reflection.GeneratedProtocolMessageType('SubscribeHomeassistantServicesRequest', (_message.Message,), { - 'DESCRIPTOR' : _SUBSCRIBEHOMEASSISTANTSERVICESREQUEST, - '__module__' : 'api_pb2' +SubscribeHomeassistantServicesRequest = _reflection.GeneratedProtocolMessageType('SubscribeHomeassistantServicesRequest', (_message.Message,), dict( + DESCRIPTOR = _SUBSCRIBEHOMEASSISTANTSERVICESREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:SubscribeHomeassistantServicesRequest) - }) + )) _sym_db.RegisterMessage(SubscribeHomeassistantServicesRequest) -HomeassistantServiceMap = _reflection.GeneratedProtocolMessageType('HomeassistantServiceMap', (_message.Message,), { - 'DESCRIPTOR' : _HOMEASSISTANTSERVICEMAP, - '__module__' : 'api_pb2' +HomeassistantServiceMap = _reflection.GeneratedProtocolMessageType('HomeassistantServiceMap', (_message.Message,), dict( + DESCRIPTOR = _HOMEASSISTANTSERVICEMAP, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:HomeassistantServiceMap) - }) + )) _sym_db.RegisterMessage(HomeassistantServiceMap) -HomeassistantServiceResponse = _reflection.GeneratedProtocolMessageType('HomeassistantServiceResponse', (_message.Message,), { - 'DESCRIPTOR' : _HOMEASSISTANTSERVICERESPONSE, - '__module__' : 'api_pb2' +HomeassistantServiceResponse = _reflection.GeneratedProtocolMessageType('HomeassistantServiceResponse', (_message.Message,), dict( + DESCRIPTOR = _HOMEASSISTANTSERVICERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:HomeassistantServiceResponse) - }) + )) _sym_db.RegisterMessage(HomeassistantServiceResponse) -SubscribeHomeAssistantStatesRequest = _reflection.GeneratedProtocolMessageType('SubscribeHomeAssistantStatesRequest', (_message.Message,), { - 'DESCRIPTOR' : _SUBSCRIBEHOMEASSISTANTSTATESREQUEST, - '__module__' : 'api_pb2' +SubscribeHomeAssistantStatesRequest = _reflection.GeneratedProtocolMessageType('SubscribeHomeAssistantStatesRequest', (_message.Message,), dict( + DESCRIPTOR = _SUBSCRIBEHOMEASSISTANTSTATESREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:SubscribeHomeAssistantStatesRequest) - }) + )) _sym_db.RegisterMessage(SubscribeHomeAssistantStatesRequest) -SubscribeHomeAssistantStateResponse = _reflection.GeneratedProtocolMessageType('SubscribeHomeAssistantStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _SUBSCRIBEHOMEASSISTANTSTATERESPONSE, - '__module__' : 'api_pb2' +SubscribeHomeAssistantStateResponse = _reflection.GeneratedProtocolMessageType('SubscribeHomeAssistantStateResponse', (_message.Message,), dict( + DESCRIPTOR = _SUBSCRIBEHOMEASSISTANTSTATERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:SubscribeHomeAssistantStateResponse) - }) + )) _sym_db.RegisterMessage(SubscribeHomeAssistantStateResponse) -HomeAssistantStateResponse = _reflection.GeneratedProtocolMessageType('HomeAssistantStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _HOMEASSISTANTSTATERESPONSE, - '__module__' : 'api_pb2' +HomeAssistantStateResponse = _reflection.GeneratedProtocolMessageType('HomeAssistantStateResponse', (_message.Message,), dict( + DESCRIPTOR = _HOMEASSISTANTSTATERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:HomeAssistantStateResponse) - }) + )) _sym_db.RegisterMessage(HomeAssistantStateResponse) -GetTimeRequest = _reflection.GeneratedProtocolMessageType('GetTimeRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETTIMEREQUEST, - '__module__' : 'api_pb2' +GetTimeRequest = _reflection.GeneratedProtocolMessageType('GetTimeRequest', (_message.Message,), dict( + DESCRIPTOR = _GETTIMEREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:GetTimeRequest) - }) + )) _sym_db.RegisterMessage(GetTimeRequest) -GetTimeResponse = _reflection.GeneratedProtocolMessageType('GetTimeResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETTIMERESPONSE, - '__module__' : 'api_pb2' +GetTimeResponse = _reflection.GeneratedProtocolMessageType('GetTimeResponse', (_message.Message,), dict( + DESCRIPTOR = _GETTIMERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:GetTimeResponse) - }) + )) _sym_db.RegisterMessage(GetTimeResponse) -ListEntitiesServicesArgument = _reflection.GeneratedProtocolMessageType('ListEntitiesServicesArgument', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESSERVICESARGUMENT, - '__module__' : 'api_pb2' +ListEntitiesServicesArgument = _reflection.GeneratedProtocolMessageType('ListEntitiesServicesArgument', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESSERVICESARGUMENT, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesServicesArgument) - }) + )) _sym_db.RegisterMessage(ListEntitiesServicesArgument) -ListEntitiesServicesResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesServicesResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESSERVICESRESPONSE, - '__module__' : 'api_pb2' +ListEntitiesServicesResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesServicesResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESSERVICESRESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesServicesResponse) - }) + )) _sym_db.RegisterMessage(ListEntitiesServicesResponse) -ExecuteServiceArgument = _reflection.GeneratedProtocolMessageType('ExecuteServiceArgument', (_message.Message,), { - 'DESCRIPTOR' : _EXECUTESERVICEARGUMENT, - '__module__' : 'api_pb2' +ExecuteServiceArgument = _reflection.GeneratedProtocolMessageType('ExecuteServiceArgument', (_message.Message,), dict( + DESCRIPTOR = _EXECUTESERVICEARGUMENT, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ExecuteServiceArgument) - }) + )) _sym_db.RegisterMessage(ExecuteServiceArgument) -ExecuteServiceRequest = _reflection.GeneratedProtocolMessageType('ExecuteServiceRequest', (_message.Message,), { - 'DESCRIPTOR' : _EXECUTESERVICEREQUEST, - '__module__' : 'api_pb2' +ExecuteServiceRequest = _reflection.GeneratedProtocolMessageType('ExecuteServiceRequest', (_message.Message,), dict( + DESCRIPTOR = _EXECUTESERVICEREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ExecuteServiceRequest) - }) + )) _sym_db.RegisterMessage(ExecuteServiceRequest) -ListEntitiesCameraResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesCameraResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESCAMERARESPONSE, - '__module__' : 'api_pb2' +ListEntitiesCameraResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesCameraResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESCAMERARESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesCameraResponse) - }) + )) _sym_db.RegisterMessage(ListEntitiesCameraResponse) -CameraImageResponse = _reflection.GeneratedProtocolMessageType('CameraImageResponse', (_message.Message,), { - 'DESCRIPTOR' : _CAMERAIMAGERESPONSE, - '__module__' : 'api_pb2' +CameraImageResponse = _reflection.GeneratedProtocolMessageType('CameraImageResponse', (_message.Message,), dict( + DESCRIPTOR = _CAMERAIMAGERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:CameraImageResponse) - }) + )) _sym_db.RegisterMessage(CameraImageResponse) -CameraImageRequest = _reflection.GeneratedProtocolMessageType('CameraImageRequest', (_message.Message,), { - 'DESCRIPTOR' : _CAMERAIMAGEREQUEST, - '__module__' : 'api_pb2' +CameraImageRequest = _reflection.GeneratedProtocolMessageType('CameraImageRequest', (_message.Message,), dict( + DESCRIPTOR = _CAMERAIMAGEREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:CameraImageRequest) - }) + )) _sym_db.RegisterMessage(CameraImageRequest) -ListEntitiesClimateResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesClimateResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTENTITIESCLIMATERESPONSE, - '__module__' : 'api_pb2' +ListEntitiesClimateResponse = _reflection.GeneratedProtocolMessageType('ListEntitiesClimateResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTENTITIESCLIMATERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ListEntitiesClimateResponse) - }) + )) _sym_db.RegisterMessage(ListEntitiesClimateResponse) -ClimateStateResponse = _reflection.GeneratedProtocolMessageType('ClimateStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _CLIMATESTATERESPONSE, - '__module__' : 'api_pb2' +ClimateStateResponse = _reflection.GeneratedProtocolMessageType('ClimateStateResponse', (_message.Message,), dict( + DESCRIPTOR = _CLIMATESTATERESPONSE, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ClimateStateResponse) - }) + )) _sym_db.RegisterMessage(ClimateStateResponse) -ClimateCommandRequest = _reflection.GeneratedProtocolMessageType('ClimateCommandRequest', (_message.Message,), { - 'DESCRIPTOR' : _CLIMATECOMMANDREQUEST, - '__module__' : 'api_pb2' +ClimateCommandRequest = _reflection.GeneratedProtocolMessageType('ClimateCommandRequest', (_message.Message,), dict( + DESCRIPTOR = _CLIMATECOMMANDREQUEST, + __module__ = 'api_pb2' # @@protoc_insertion_point(class_scope:ClimateCommandRequest) - }) + )) _sym_db.RegisterMessage(ClimateCommandRequest) @@ -3438,8 +3606,8 @@ _APICONNECTION = _descriptor.ServiceDescriptor( file=DESCRIPTOR, index=0, serialized_options=None, - serialized_start=7399, - serialized_end=8396, + serialized_start=8085, + serialized_end=9082, methods=[ _descriptor.MethodDescriptor( name='hello', diff --git a/aioesphomeapi/client.py b/aioesphomeapi/client.py index a07eed9..2cb2a90 100644 --- a/aioesphomeapi/client.py +++ b/aioesphomeapi/client.py @@ -50,7 +50,8 @@ class APIClient: raise except Exception as e: await _on_stop() - raise APIConnectionError("Unexpected error while connecting: {}".format(e)) + raise APIConnectionError( + "Unexpected error while connecting: {}".format(e)) connected = True @@ -326,6 +327,8 @@ class APIClient: target_temperature_low: Optional[float] = None, target_temperature_high: Optional[float] = None, away: Optional[bool] = None, + fan_mode: Optional[ClimateFanMode] = None, + swing_mode: Optional[ClimateSwingMode] = None, ) -> None: self._check_authenticated() @@ -346,6 +349,12 @@ class APIClient: if away is not None: req.has_away = True req.away = away + if fan_mode is not None: + req.has_fan_mode = True + req.fan_mode = fan_mode + if swing_mode is not None: + req.has_swing_mode = True + req.swing_mode = swing_mode await self._connection.send_message(req) async def execute_service(self, service: UserService, data: dict): @@ -357,7 +366,8 @@ class APIClient: for arg_desc in service.args: arg = pb.ExecuteServiceArgument() val = data[arg_desc.name] - int_type = 'int_' if self.api_version >= APIVersion(1, 3) else 'legacy_int' + int_type = 'int_' if self.api_version >= APIVersion( + 1, 3) else 'legacy_int' map_single = { UserServiceArgType.BOOL: 'bool_', UserServiceArgType.INT: int_type, diff --git a/aioesphomeapi/connection.py b/aioesphomeapi/connection.py index b36b7bc..0154532 100644 --- a/aioesphomeapi/connection.py +++ b/aioesphomeapi/connection.py @@ -120,10 +120,12 @@ class APIConnection: await asyncio.wait_for(coro, 30.0) except OSError as err: await self._on_error() - raise APIConnectionError("Error connecting to {}: {}".format(sockaddr, err)) + raise APIConnectionError( + "Error connecting to {}: {}".format(sockaddr, err)) except asyncio.TimeoutError: await self._on_error() - raise APIConnectionError("Timeout while connecting to {}".format(sockaddr)) + raise APIConnectionError( + "Timeout while connecting to {}".format(sockaddr)) _LOGGER.debug("%s: Opened socket for", self._params.address) self._socket_reader, self._socket_writer = await asyncio.open_connection(sock=self._socket) @@ -140,7 +142,8 @@ class APIConnection: _LOGGER.debug("%s: Successfully connected ('%s' API=%s.%s)", self._params.address, resp.server_info, resp.api_version_major, resp.api_version_minor) - self._api_version = APIVersion(resp.api_version_major, resp.api_version_minor) + self._api_version = APIVersion( + resp.api_version_major, resp.api_version_minor) if self._api_version.major > 2: _LOGGER.error("%s: Incompatible version %s! Closing connection", self._api_version.major) @@ -187,7 +190,8 @@ class APIConnection: await self._socket_writer.drain() except OSError as err: await self._on_error() - raise APIConnectionError("Error while writing data: {}".format(err)) + raise APIConnectionError( + "Error while writing data: {}".format(err)) async def send_message(self, msg: message.Message) -> None: for message_type, klass in MESSAGE_TYPE_TO_PROTO.items(): @@ -197,7 +201,8 @@ class APIConnection: raise ValueError encoded = msg.SerializeToString() - _LOGGER.debug("%s: Sending %s: %s", self._params.address, type(msg), str(msg)) + _LOGGER.debug("%s: Sending %s: %s", + self._params.address, type(msg), str(msg)) req = bytes([0]) req += _varuint_to_bytes(len(encoded)) req += _varuint_to_bytes(message_type) @@ -231,7 +236,8 @@ class APIConnection: await asyncio.wait_for(fut, timeout) except asyncio.TimeoutError: if self._stopped: - raise APIConnectionError("Disconnected while waiting for API response!") + raise APIConnectionError( + "Disconnected while waiting for API response!") raise APIConnectionError("Timeout while waiting for API response!") try: @@ -250,7 +256,8 @@ class APIConnection: res = await self.send_message_await_response_complex( send_msg, is_response, is_response, timeout=timeout) if len(res) != 1: - raise APIConnectionError("Expected one result, got {}".format(len(res))) + raise APIConnectionError( + "Expected one result, got {}".format(len(res))) return res[0] @@ -261,7 +268,8 @@ class APIConnection: try: ret = await self._socket_reader.readexactly(amount) except (asyncio.IncompleteReadError, OSError, TimeoutError) as err: - raise APIConnectionError("Error while receiving data: {}".format(err)) + raise APIConnectionError( + "Error while receiving data: {}".format(err)) return ret @@ -281,7 +289,8 @@ class APIConnection: raw_msg = await self._recv(length) if msg_type not in MESSAGE_TYPE_TO_PROTO: - _LOGGER.debug("%s: Skipping message type %s", self._params.address, msg_type) + _LOGGER.debug("%s: Skipping message type %s", + self._params.address, msg_type) return msg = MESSAGE_TYPE_TO_PROTO[msg_type]() @@ -289,7 +298,8 @@ class APIConnection: msg.ParseFromString(raw_msg) except Exception as e: raise APIConnectionError("Invalid protobuf message: {}".format(e)) - _LOGGER.debug("%s: Got message of type %s: %s", self._params.address, type(msg), msg) + _LOGGER.debug("%s: Got message of type %s: %s", + self._params.address, type(msg), msg) for msg_handler in self._message_handlers[:]: msg_handler(msg) await self._handle_internal_messages(msg) diff --git a/aioesphomeapi/model.py b/aioesphomeapi/model.py index afa9786..ef87a9b 100644 --- a/aioesphomeapi/model.py +++ b/aioesphomeapi/model.py @@ -194,6 +194,27 @@ class ClimateMode(enum.IntEnum): AUTO = 1 COOL = 2 HEAT = 3 + FAN_ONLY = 4 + DRY = 5 + + +class ClimateFanMode(enum.IntEnum): + ON = 0 + OFF = 1 + AUTO = 2 + LOW = 3 + MEDIUM = 4 + HIGH = 5 + MIDDLE = 6 + FOCUS = 7 + DIFFUSE = 8 + + +class ClimateSwingMode(enum.IntEnum): + OFF = 0 + BOTH = 1 + VERTICAL = 2 + HORIZONTAL = 3 class ClimateAction(enum.IntEnum): @@ -206,6 +227,14 @@ def _convert_climate_modes(value): return [ClimateMode(val) for val in value] +def _convert_climate_fan_modes(value): + return [ClimateFanMode(val) for val in value] + + +def _convert_climate_swing_modes(value): + return [ClimateSwingMode(val) for val in value] + + @attr.s class ClimateInfo(EntityInfo): supports_current_temperature = attr.ib(type=bool, default=False) @@ -217,17 +246,31 @@ class ClimateInfo(EntityInfo): visual_temperature_step = attr.ib(type=float, default=0.0) supports_away = attr.ib(type=bool, default=False) supports_action = attr.ib(type=bool, default=False) + supported_fan_modes = attr.ib( + type=List[ClimateFanMode], converter=_convert_climate_fan_modes, factory=list + ) + supported_swing_modes = attr.ib( + type=List[ClimateSwingMode], converter=_convert_climate_swing_modes, factory=list + ) @attr.s class ClimateState(EntityState): - mode = attr.ib(type=ClimateMode, converter=ClimateMode, default=ClimateMode.OFF) - action = attr.ib(type=ClimateAction, converter=ClimateAction, default=ClimateAction.OFF) + mode = attr.ib(type=ClimateMode, converter=ClimateMode, + default=ClimateMode.OFF) + action = attr.ib(type=ClimateAction, converter=ClimateAction, + default=ClimateAction.OFF) current_temperature = attr.ib(type=float, default=0.0) target_temperature = attr.ib(type=float, default=0.0) target_temperature_low = attr.ib(type=float, default=0.0) target_temperature_high = attr.ib(type=float, default=0.0) away = attr.ib(type=bool, default=False) + fan_mode = attr.ib( + type=ClimateFanMode, converter=ClimateFanMode, default=ClimateFanMode.AUTO + ) + swing_mode = attr.ib( + type=ClimateSwingMode, converter=ClimateSwingMode, default=ClimateSwingMode.OFF + ) COMPONENT_TYPE_TO_INFO = { diff --git a/gen-protoc.sh b/gen-protoc.sh index 44826bd..100b2a3 100755 --- a/gen-protoc.sh +++ b/gen-protoc.sh @@ -4,4 +4,4 @@ protoc --python_out=aioesphomeapi -I aioesphomeapi aioesphomeapi/*.proto # https://github.com/protocolbuffers/protobuf/issues/1491 -sed -i '' 's/import api_options_pb2 as api__options__pb2/from . import api_options_pb2 as api__options__pb2/' aioesphomeapi/api_pb2.py +sed -i 's/import api_options_pb2 as api__options__pb2/from . import api_options_pb2 as api__options__pb2/' aioesphomeapi/api_pb2.py