diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 5a01bc105..ab270d9eb 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -28,13 +28,13 @@ jobs: uses: actions/checkout@v6 - name: Log in to docker hub - uses: docker/login-action@v3.6.0 + uses: docker/login-action@v3.7.0 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Log in to the GitHub container registry - uses: docker/login-action@v3.6.0 + uses: docker/login-action@v3.7.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -47,7 +47,7 @@ jobs: uses: docker/setup-buildx-action@v3.12.0 - name: Build and Push - uses: docker/build-push-action@v6.18.0 + uses: docker/build-push-action@v6.19.2 with: context: . tags: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 705271216..e0e32f802 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -64,7 +64,7 @@ jobs: echo "CIBW_BUILD=${{ matrix.pyver }}*" >> $GITHUB_ENV fi - name: Build wheels - uses: pypa/cibuildwheel@v3.3.0 + uses: pypa/cibuildwheel@v3.3.1 env: CIBW_SKIP: cp36-* cp37-* cp38-* cp39-* cp310-* pp* ${{ matrix.musl == 'musllinux' && '*manylinux*' || '*musllinux*' }} CIBW_BEFORE_ALL_LINUX: apt-get install -y gcc || yum install -y gcc || apk add gcc diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b2f6b83b0..615ef9090 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,7 +13,7 @@ repos: - id: pyupgrade args: [--py311-plus] - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.14.10 + rev: v0.15.0 hooks: - id: ruff args: [--fix] @@ -29,7 +29,7 @@ repos: - --keep-updates files: ^(aioesphomeapi)/.+\.py$ - repo: https://github.com/MarcoGorelli/cython-lint - rev: v0.18.1 + rev: v0.19.0 hooks: - id: cython-lint - id: double-quote-cython-strings diff --git a/README.rst b/README.rst index ac8e263a5..813958f83 100644 --- a/README.rst +++ b/README.rst @@ -2,10 +2,10 @@ aioesphomeapi ============= .. image:: https://github.com/esphome/aioesphomeapi/workflows/CI/badge.svg - :target: https://github.com/esphome/aioesphomeapi?query=workflow%3ACI+branch%3Amain + :target: https://github.com/esphome/aioesphomeapi/actions/workflows/ci.yml?query=branch%3Amain .. image:: https://img.shields.io/pypi/v/aioesphomeapi.svg - :target: https://pypi.python.org/pypi/aioesphomeapi + :target: https://pypi.org/project/aioesphomeapi/ .. image:: https://codecov.io/gh/esphome/aioesphomeapi/branch/main/graph/badge.svg :target: https://app.codecov.io/gh/esphome/aioesphomeapi/tree/main @@ -18,7 +18,7 @@ aioesphomeapi Installation ------------ -The module is available from the `Python Package Index `_. +The module is available from the `Python Package Index `_. .. code:: bash @@ -33,15 +33,32 @@ Building the extension can be forcefully disabled by setting the environment var Usage ----- -It's required that you enable the `Native API `_ component for the device. +It's required that you enable the `Native API `_ component for the device. .. code:: yaml # Example configuration entry api: - password: 'MyPassword' -Check the output to get the local address of the device or use the ``name:``under ``esphome:`` from the device configuration. +For secure communication, use encryption (recommended): + +.. code:: yaml + + api: + encryption: + key: !secret api_encryption_key + +Generate an encryption key with ``openssl rand -base64 32`` or visit https://esphome.io/components/api/ + +**Note:** Password authentication was removed in ESPHome 2026.1.0. Encryption is optional but recommended for security. + +To connect to older devices still using password authentication: + +.. code:: python + + api = aioesphomeapi.APIClient("device.local", 6053, password="MyPassword") + +Check the output to get the local address of the device or use the ``name:`` under ``esphome:`` from the device configuration. .. code:: bash @@ -60,7 +77,11 @@ The sample code below will connect to the device and retrieve details. """Connect to an ESPHome device and get details.""" # Establish connection - api = aioesphomeapi.APIClient("api_test.local", 6053, "MyPassword") + api = aioesphomeapi.APIClient( + "api_test.local", + 6053, + noise_psk="YOUR_ENCRYPTION_KEY", # Remove if not using encryption + ) await api.connect(login=True) # Get API version of the device's firmware @@ -86,16 +107,19 @@ Subscribe to state changes of an ESPHome device. async def main(): """Connect to an ESPHome device and wait for state changes.""" - cli = aioesphomeapi.APIClient("api_test.local", 6053, "MyPassword") - - await cli.connect(login=True) + api = aioesphomeapi.APIClient( + "api_test.local", + 6053, + noise_psk="YOUR_ENCRYPTION_KEY", # Remove if not using encryption + ) + await api.connect(login=True) def change_callback(state): - """Print the state changes of the device..""" + """Print the state changes of the device.""" print(state) # Subscribe to the state changes - cli.subscribe_states(change_callback) + api.subscribe_states(change_callback) loop = asyncio.get_event_loop() try: @@ -129,8 +153,10 @@ For development is recommended to use a Python virtual environment (``venv``). # Run linters & test $ script/lint - # Update protobuf _pb2.py definitions (requires a protobuf compiler installation) - $ script/gen-protoc + # Update protobuf _pb2.py definitions (requires docker or podman) + $ docker run --rm -v $PWD:/aioesphomeapi ghcr.io/esphome/aioesphomeapi-proto-builder:latest + # Or with podman: + $ podman run --rm -v $PWD:/aioesphomeapi --userns=keep-id ghcr.io/esphome/aioesphomeapi-proto-builder:latest A cli tool is also available for watching logs: diff --git a/aioesphomeapi/api_options.proto b/aioesphomeapi/api_options.proto index 6b33408e2..a863f2c7a 100644 --- a/aioesphomeapi/api_options.proto +++ b/aioesphomeapi/api_options.proto @@ -27,7 +27,6 @@ extend google.protobuf.MessageOptions { extend google.protobuf.FieldOptions { optional string field_ifdef = 1042; optional uint32 fixed_array_size = 50007; - optional bool no_zero_copy = 50008 [default=false]; optional bool fixed_array_skip_zero = 50009 [default=false]; optional string fixed_array_size_define = 50010; optional string fixed_array_with_length_define = 50011; @@ -80,4 +79,15 @@ extend google.protobuf.FieldOptions { // Example: [(container_pointer_no_template) = "light::ColorModeMask"] // generates: const light::ColorModeMask *supported_color_modes{}; optional string container_pointer_no_template = 50014; + + // packed_buffer: Expose raw packed buffer instead of decoding into container + // When set on a packed repeated field, the generated code stores a pointer + // to the raw protobuf buffer instead of decoding values. This enables + // zero-copy passthrough when the consumer can decode on-demand. + // The field must be a packed repeated field (packed=true). + // Generates three fields: + // - const uint8_t *_data_{nullptr}; + // - uint16_t _length_{0}; + // - uint16_t _count_{0}; + optional bool packed_buffer = 50015 [default=false]; } diff --git a/aioesphomeapi/api_options_pb2.py b/aioesphomeapi/api_options_pb2.py index 22edbb34a..bcf184c7d 100644 --- a/aioesphomeapi/api_options_pb2.py +++ b/aioesphomeapi/api_options_pb2.py @@ -26,7 +26,7 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(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:4\n\nbase_class\x12\x1f.google.protobuf.MessageOptions\x18\x91\x08 \x01(\t:3\n\x0b\x66ield_ifdef\x12\x1d.google.protobuf.FieldOptions\x18\x92\x08 \x01(\t:9\n\x10\x66ixed_array_size\x12\x1d.google.protobuf.FieldOptions\x18\xd7\x86\x03 \x01(\r:<\n\x0cno_zero_copy\x12\x1d.google.protobuf.FieldOptions\x18\xd8\x86\x03 \x01(\x08:\x05\x66\x61lse:E\n\x15\x66ixed_array_skip_zero\x12\x1d.google.protobuf.FieldOptions\x18\xd9\x86\x03 \x01(\x08:\x05\x66\x61lse:@\n\x17\x66ixed_array_size_define\x12\x1d.google.protobuf.FieldOptions\x18\xda\x86\x03 \x01(\t:G\n\x1e\x66ixed_array_with_length_define\x12\x1d.google.protobuf.FieldOptions\x18\xdb\x86\x03 \x01(\t:A\n\x11pointer_to_buffer\x12\x1d.google.protobuf.FieldOptions\x18\xdc\x86\x03 \x01(\x08:\x05\x66\x61lse::\n\x11\x63ontainer_pointer\x12\x1d.google.protobuf.FieldOptions\x18\xd1\x86\x03 \x01(\t:<\n\x0c\x66ixed_vector\x12\x1d.google.protobuf.FieldOptions\x18\xdd\x86\x03 \x01(\x08:\x05\x66\x61lse:F\n\x1d\x63ontainer_pointer_no_template\x12\x1d.google.protobuf.FieldOptions\x18\xde\x86\x03 \x01(\t') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(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:4\n\nbase_class\x12\x1f.google.protobuf.MessageOptions\x18\x91\x08 \x01(\t:3\n\x0b\x66ield_ifdef\x12\x1d.google.protobuf.FieldOptions\x18\x92\x08 \x01(\t:9\n\x10\x66ixed_array_size\x12\x1d.google.protobuf.FieldOptions\x18\xd7\x86\x03 \x01(\r:E\n\x15\x66ixed_array_skip_zero\x12\x1d.google.protobuf.FieldOptions\x18\xd9\x86\x03 \x01(\x08:\x05\x66\x61lse:@\n\x17\x66ixed_array_size_define\x12\x1d.google.protobuf.FieldOptions\x18\xda\x86\x03 \x01(\t:G\n\x1e\x66ixed_array_with_length_define\x12\x1d.google.protobuf.FieldOptions\x18\xdb\x86\x03 \x01(\t:A\n\x11pointer_to_buffer\x12\x1d.google.protobuf.FieldOptions\x18\xdc\x86\x03 \x01(\x08:\x05\x66\x61lse::\n\x11\x63ontainer_pointer\x12\x1d.google.protobuf.FieldOptions\x18\xd1\x86\x03 \x01(\t:<\n\x0c\x66ixed_vector\x12\x1d.google.protobuf.FieldOptions\x18\xdd\x86\x03 \x01(\x08:\x05\x66\x61lse:F\n\x1d\x63ontainer_pointer_no_template\x12\x1d.google.protobuf.FieldOptions\x18\xde\x86\x03 \x01(\t:=\n\rpacked_buffer\x12\x1d.google.protobuf.FieldOptions\x18\xdf\x86\x03 \x01(\x08:\x05\x66\x61lse') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) diff --git a/aioesphomeapi/api_pb2.py b/aioesphomeapi/api_pb2.py index 4a70bfb89..f4c230f31 100644 --- a/aioesphomeapi/api_pb2.py +++ b/aioesphomeapi/api_pb2.py @@ -26,7 +26,7 @@ from . import api_options_pb2 as api__options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tapi.proto\x1a\x11\x61pi_options.proto\"j\n\x0cHelloRequest\x12\x19\n\x0b\x63lient_info\x18\x01 \x01(\tB\x04\xe0\xb5\x18\x01\x12\x19\n\x11\x61pi_version_major\x18\x02 \x01(\r\x12\x19\n\x11\x61pi_version_minor\x18\x03 \x01(\r:\t\xe0@\x01\xe8@\x02\x80\x41\x01\"s\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\x12\x0c\n\x04name\x18\x04 \x01(\t:\t\xe0@\x02\xe8@\x01\x80\x41\x01\"M\n\x15\x41uthenticationRequest\x12\x16\n\x08password\x18\x01 \x01(\tB\x04\xe0\xb5\x18\x01:\x1c\xe0@\x03\xe8@\x02\xf2@\x10USE_API_PASSWORD\x80\x41\x01\"P\n\x16\x41uthenticationResponse\x12\x18\n\x10invalid_password\x18\x01 \x01(\x08:\x1c\xe0@\x04\xe8@\x01\xf2@\x10USE_API_PASSWORD\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\")\n\x08\x41reaInfo\x12\x0f\n\x07\x61rea_id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\">\n\nDeviceInfo\x12\x11\n\tdevice_id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07\x61rea_id\x18\x03 \x01(\r\"\xb0\x08\n\x12\x44\x65viceInfoResponse\x12*\n\ruses_password\x18\x01 \x01(\x08\x42\x13\x92\x41\x10USE_API_PASSWORD\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)\n\x0ehas_deep_sleep\x18\x07 \x01(\x08\x42\x11\x92\x41\x0eUSE_DEEP_SLEEP\x12-\n\x0cproject_name\x18\x08 \x01(\tB\x17\x92\x41\x14\x45SPHOME_PROJECT_NAME\x12\x30\n\x0fproject_version\x18\t \x01(\tB\x17\x92\x41\x14\x45SPHOME_PROJECT_NAME\x12(\n\x0ewebserver_port\x18\n \x01(\rB\x10\x92\x41\rUSE_WEBSERVER\x12@\n\x1elegacy_bluetooth_proxy_version\x18\x0b \x01(\rB\x18\x18\x01\x92\x41\x13USE_BLUETOOTH_PROXY\x12=\n\x1d\x62luetooth_proxy_feature_flags\x18\x0f \x01(\rB\x16\x92\x41\x13USE_BLUETOOTH_PROXY\x12\x14\n\x0cmanufacturer\x18\x0c \x01(\t\x12\x15\n\rfriendly_name\x18\r \x01(\t\x12@\n\x1elegacy_voice_assistant_version\x18\x0e \x01(\rB\x18\x18\x01\x92\x41\x13USE_VOICE_ASSISTANT\x12=\n\x1dvoice_assistant_feature_flags\x18\x11 \x01(\rB\x16\x92\x41\x13USE_VOICE_ASSISTANT\x12$\n\x0esuggested_area\x18\x10 \x01(\tB\x0c\x92\x41\tUSE_AREAS\x12\x35\n\x15\x62luetooth_mac_address\x18\x12 \x01(\tB\x16\x92\x41\x13USE_BLUETOOTH_PROXY\x12\x32\n\x18\x61pi_encryption_supported\x18\x13 \x01(\x08\x42\x10\x92\x41\rUSE_API_NOISE\x12\x44\n\x07\x64\x65vices\x18\x14 \x03(\x0b\x32\x0b.DeviceInfoB&\x92\x41\x0bUSE_DEVICES\xd2\xb5\x18\x14\x45SPHOME_DEVICE_COUNT\x12<\n\x05\x61reas\x18\x15 \x03(\x0b\x32\t.AreaInfoB\"\x92\x41\tUSE_AREAS\xd2\xb5\x18\x12\x45SPHOME_AREA_COUNT\x12%\n\x04\x61rea\x18\x16 \x01(\x0b\x32\t.AreaInfoB\x0c\x92\x41\tUSE_AREAS\x12\x35\n\x19zwave_proxy_feature_flags\x18\x17 \x01(\rB\x12\x92\x41\x0fUSE_ZWAVE_PROXY\x12)\n\rzwave_home_id\x18\x18 \x01(\rB\x12\x92\x41\x0fUSE_ZWAVE_PROXY:\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\"\xd0\x02\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\x14\n\x0c\x64\x65vice_class\x18\x05 \x01(\t\x12\x1f\n\x17is_status_binary_sensor\x18\x06 \x01(\x08\x12\x1b\n\x13\x64isabled_by_default\x18\x07 \x01(\x08\x12 \n\x04icon\x18\x08 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12(\n\x0f\x65ntity_category\x18\t \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\n \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:5\xe0@\x0c\xe8@\x01\xf2@\x11USE_BINARY_SENSOR\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xac\x01\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:9\xe0@\x15\xe8@\x01\xf2@\x11USE_BINARY_SENSOR\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x80\x03\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\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\x1b\n\x13\x64isabled_by_default\x18\t \x01(\x08\x12 \n\x04icon\x18\n \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12(\n\x0f\x65ntity_category\x18\x0b \x01(\x0e\x32\x0f.EntityCategory\x12\x15\n\rsupports_stop\x18\x0c \x01(\x08\x12!\n\tdevice_id\x18\r \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:-\xe0@\r\xe8@\x01\xf2@\tUSE_COVER\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xf0\x01\n\x12\x43overStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12+\n\x0clegacy_state\x18\x02 \x01(\x0e\x32\x11.LegacyCoverStateB\x02\x18\x01\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\x12!\n\tdevice_id\x18\x06 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:1\xe0@\x16\xe8@\x01\xf2@\tUSE_COVER\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x99\x02\n\x13\x43overCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x1e\n\x12has_legacy_command\x18\x02 \x01(\x08\x42\x02\x18\x01\x12/\n\x0elegacy_command\x18\x03 \x01(\x0e\x32\x13.LegacyCoverCommandB\x02\x18\x01\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\x12!\n\tdevice_id\x18\t \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:+\xe0@\x1e\xe8@\x02\xf2@\tUSE_COVER\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xb6\x03\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\x1c\n\x14supports_oscillation\x18\x05 \x01(\x08\x12\x16\n\x0esupports_speed\x18\x06 \x01(\x08\x12\x1a\n\x12supports_direction\x18\x07 \x01(\x08\x12\x1d\n\x15supported_speed_count\x18\x08 \x01(\x05\x12\x1b\n\x13\x64isabled_by_default\x18\t \x01(\x08\x12 \n\x04icon\x18\n \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12(\n\x0f\x65ntity_category\x18\x0b \x01(\x0e\x32\x0f.EntityCategory\x12=\n\x16supported_preset_modes\x18\x0c \x03(\tB\x1d\xf2\xb5\x18\x19std::vector\x12!\n\tdevice_id\x18\r \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:+\xe0@\x0e\xe8@\x01\xf2@\x07USE_FAN\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x81\x02\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\x1c\n\x05speed\x18\x04 \x01(\x0e\x32\t.FanSpeedB\x02\x18\x01\x12 \n\tdirection\x18\x05 \x01(\x0e\x32\r.FanDirection\x12\x13\n\x0bspeed_level\x18\x06 \x01(\x05\x12\x13\n\x0bpreset_mode\x18\x07 \x01(\t\x12!\n\tdevice_id\x18\x08 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:/\xe0@\x17\xe8@\x01\xf2@\x07USE_FAN\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x8e\x03\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\x15\n\thas_speed\x18\x04 \x01(\x08\x42\x02\x18\x01\x12\x1c\n\x05speed\x18\x05 \x01(\x0e\x32\t.FanSpeedB\x02\x18\x01\x12\x17\n\x0fhas_oscillating\x18\x06 \x01(\x08\x12\x13\n\x0boscillating\x18\x07 \x01(\x08\x12\x15\n\rhas_direction\x18\x08 \x01(\x08\x12 \n\tdirection\x18\t \x01(\x0e\x32\r.FanDirection\x12\x17\n\x0fhas_speed_level\x18\n \x01(\x08\x12\x13\n\x0bspeed_level\x18\x0b \x01(\x05\x12\x17\n\x0fhas_preset_mode\x18\x0c \x01(\x08\x12\x19\n\x0bpreset_mode\x18\r \x01(\tB\x04\xe0\xb5\x18\x01\x12!\n\tdevice_id\x18\x0e \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:)\xe0@\x1f\xe8@\x02\xf2@\x07USE_FAN\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xc8\x04\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\x43\n\x15supported_color_modes\x18\x0c \x03(\x0e\x32\n.ColorModeB\x18\xf2\xb5\x18\x14light::ColorModeMask\x12&\n\x1alegacy_supports_brightness\x18\x05 \x01(\x08\x42\x02\x18\x01\x12\x1f\n\x13legacy_supports_rgb\x18\x06 \x01(\x08\x42\x02\x18\x01\x12\'\n\x1blegacy_supports_white_value\x18\x07 \x01(\x08\x42\x02\x18\x01\x12-\n!legacy_supports_color_temperature\x18\x08 \x01(\x08\x42\x02\x18\x01\x12\x12\n\nmin_mireds\x18\t \x01(\x02\x12\x12\n\nmax_mireds\x18\n \x01(\x02\x12.\n\x07\x65\x66\x66\x65\x63ts\x18\x0b \x03(\tB\x1d\xf2\xb5\x18\x19\x46ixedVector\x12\x1b\n\x13\x64isabled_by_default\x18\r \x01(\x08\x12 \n\x04icon\x18\x0e \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12(\n\x0f\x65ntity_category\x18\x0f \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x10 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:-\xe0@\x0f\xe8@\x01\xf2@\tUSE_LIGHT\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xe0\x02\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\x1e\n\ncolor_mode\x18\x0b \x01(\x0e\x32\n.ColorMode\x12\x18\n\x10\x63olor_brightness\x18\n \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\x12\n\ncold_white\x18\x0c \x01(\x02\x12\x12\n\nwarm_white\x18\r \x01(\x02\x12\x0e\n\x06\x65\x66\x66\x65\x63t\x18\t \x01(\t\x12!\n\tdevice_id\x18\x0e \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:1\xe0@\x18\xe8@\x01\xf2@\tUSE_LIGHT\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xb3\x05\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\x16\n\x0ehas_color_mode\x18\x16 \x01(\x08\x12\x1e\n\ncolor_mode\x18\x17 \x01(\x0e\x32\n.ColorMode\x12\x1c\n\x14has_color_brightness\x18\x14 \x01(\x08\x12\x18\n\x10\x63olor_brightness\x18\x15 \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\x16\n\x0ehas_cold_white\x18\x18 \x01(\x08\x12\x12\n\ncold_white\x18\x19 \x01(\x02\x12\x16\n\x0ehas_warm_white\x18\x1a \x01(\x08\x12\x12\n\nwarm_white\x18\x1b \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\x14\n\x06\x65\x66\x66\x65\x63t\x18\x13 \x01(\tB\x04\xe0\xb5\x18\x01\x12!\n\tdevice_id\x18\x1c \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:+\xe0@ \xe8@\x02\xf2@\tUSE_LIGHT\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xd2\x03\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\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\x12\x14\n\x0c\x64\x65vice_class\x18\t \x01(\t\x12&\n\x0bstate_class\x18\n \x01(\x0e\x32\x11.SensorStateClass\x12\x38\n\x16legacy_last_reset_type\x18\x0b \x01(\x0e\x32\x14.SensorLastResetTypeB\x02\x18\x01\x12\x1b\n\x13\x64isabled_by_default\x18\x0c \x01(\x08\x12(\n\x0f\x65ntity_category\x18\r \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x0e \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@\x10\xe8@\x01\xf2@\nUSE_SENSOR\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x9f\x01\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:2\xe0@\x19\xe8@\x01\xf2@\nUSE_SENSOR\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xb9\x02\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x15\n\rassumed_state\x18\x06 \x01(\x08\x12\x1b\n\x13\x64isabled_by_default\x18\x07 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x08 \x01(\x0e\x32\x0f.EntityCategory\x12\x14\n\x0c\x64\x65vice_class\x18\t \x01(\t\x12!\n\tdevice_id\x18\n \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@\x11\xe8@\x01\xf2@\nUSE_SWITCH\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x88\x01\n\x13SwitchStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:2\xe0@\x1a\xe8@\x01\xf2@\nUSE_SWITCH\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x83\x01\n\x14SwitchCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@!\xe8@\x02\xf2@\nUSE_SWITCH\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xab\x02\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x14\n\x0c\x64\x65vice_class\x18\x08 \x01(\t\x12!\n\tdevice_id\x18\t \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:3\xe0@\x12\xe8@\x01\xf2@\x0fUSE_TEXT_SENSOR\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xa8\x01\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:7\xe0@\x1b\xe8@\x01\xf2@\x0fUSE_TEXT_SENSOR\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"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\"P\n\x15SubscribeLogsResponse\x12\x18\n\x05level\x18\x01 \x01(\x0e\x32\t.LogLevel\x12\x0f\n\x07message\x18\x03 \x01(\x0c:\x0c\xe0@\x1d\xe8@\x01\xf8@\x00\x80\x41\x00\"I\n\x1cNoiseEncryptionSetKeyRequest\x12\x11\n\x03key\x18\x01 \x01(\x0c\x42\x04\xe0\xb5\x18\x01:\x16\xe0@|\xe8@\x02\xf2@\rUSE_API_NOISE\"H\n\x1dNoiseEncryptionSetKeyResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08:\x16\xe0@}\xe8@\x01\xf2@\rUSE_API_NOISE\"P\n%SubscribeHomeassistantServicesRequest:\'\xe0@\"\xe8@\x02\xf2@\x1eUSE_API_HOMEASSISTANT_SERVICES\";\n\x17HomeassistantServiceMap\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x13\n\x05value\x18\x02 \x01(\tB\x04\xc0\xb5\x18\x01\"\xd6\x03\n\x1aHomeassistantActionRequest\x12\x0f\n\x07service\x18\x01 \x01(\t\x12,\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32\x18.HomeassistantServiceMapB\x04\xe8\xb5\x18\x01\x12\x35\n\rdata_template\x18\x03 \x03(\x0b\x32\x18.HomeassistantServiceMapB\x04\xe8\xb5\x18\x01\x12\x31\n\tvariables\x18\x04 \x03(\x0b\x32\x18.HomeassistantServiceMapB\x04\xe8\xb5\x18\x01\x12\x10\n\x08is_event\x18\x05 \x01(\x08\x12:\n\x07\x63\x61ll_id\x18\x06 \x01(\rB)\x92\x41&USE_API_HOMEASSISTANT_ACTION_RESPONSES\x12\x46\n\x0ewants_response\x18\x07 \x01(\x08\x42.\x92\x41+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON\x12M\n\x11response_template\x18\x08 \x01(\tB2\x92\x41+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON\xc0\xb5\x18\x01:*\xe0@#\xe8@\x01\xf2@\x1eUSE_API_HOMEASSISTANT_SERVICES\x80\x41\x01\"\xd6\x01\n\x1bHomeassistantActionResponse\x12\x0f\n\x07\x63\x61ll_id\x18\x01 \x01(\r\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\x15\n\rerror_message\x18\x03 \x01(\t\x12I\n\rresponse_data\x18\x04 \x01(\x0c\x42\x32\x92\x41+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON\xe0\xb5\x18\x01:3\xe0@\x82\x01\xe8@\x02\xf2@&USE_API_HOMEASSISTANT_ACTION_RESPONSES\x80\x41\x01\"L\n#SubscribeHomeAssistantStatesRequest:%\xe0@&\xe8@\x02\xf2@\x1cUSE_API_HOMEASSISTANT_STATES\"\x80\x01\n#SubscribeHomeAssistantStateResponse\x12\x11\n\tentity_id\x18\x01 \x01(\t\x12\x11\n\tattribute\x18\x02 \x01(\t\x12\x0c\n\x04once\x18\x03 \x01(\x08:%\xe0@\'\xe8@\x01\xf2@\x1cUSE_API_HOMEASSISTANT_STATES\"\x8d\x01\n\x1aHomeAssistantStateResponse\x12\x17\n\tentity_id\x18\x01 \x01(\tB\x04\xe0\xb5\x18\x01\x12\x13\n\x05state\x18\x02 \x01(\tB\x04\xe0\xb5\x18\x01\x12\x17\n\tattribute\x18\x03 \x01(\tB\x04\xe0\xb5\x18\x01:(\xe0@(\xe8@\x02\xf2@\x1cUSE_API_HOMEASSISTANT_STATES\x80\x41\x01\"\x18\n\x0eGetTimeRequest:\x06\xe0@$\xe8@\x01\"K\n\x0fGetTimeResponse\x12\x15\n\repoch_seconds\x18\x01 \x01(\x07\x12\x16\n\x08timezone\x18\x02 \x01(\tB\x04\xe0\xb5\x18\x01:\t\xe0@%\xe8@\x02\x80\x41\x01\"l\n\x1cListEntitiesServicesArgument\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\x04type\x18\x02 \x01(\x0e\x32\x0f.ServiceArgType:\x1f\xf2@\x1cUSE_API_USER_DEFINED_ACTIONS\"\xc5\x01\n\x1cListEntitiesServicesResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x31\n\x04\x61rgs\x18\x03 \x03(\x0b\x32\x1d.ListEntitiesServicesArgumentB\x04\xe8\xb5\x18\x01\x12\x30\n\x11supports_response\x18\x04 \x01(\x0e\x32\x15.SupportsResponseType:%\xe0@)\xe8@\x01\xf2@\x1cUSE_API_USER_DEFINED_ACTIONS\"\xfb\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\x1a\n\nbool_array\x18\x06 \x03(\x08\x42\x06\x10\x00\xe8\xb5\x18\x01\x12\x19\n\tint_array\x18\x07 \x03(\x11\x42\x06\x10\x00\xe8\xb5\x18\x01\x12\x1b\n\x0b\x66loat_array\x18\x08 \x03(\x02\x42\x06\x10\x00\xe8\xb5\x18\x01\x12\x1a\n\x0cstring_array\x18\t \x03(\tB\x04\xe8\xb5\x18\x01:\x1f\xf2@\x1cUSE_API_USER_DEFINED_ACTIONS\"\xf9\x01\n\x15\x45xecuteServiceRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12+\n\x04\x61rgs\x18\x02 \x03(\x0b\x32\x17.ExecuteServiceArgumentB\x04\xe8\xb5\x18\x01\x12\x39\n\x07\x63\x61ll_id\x18\x03 \x01(\rB(\x92\x41%USE_API_USER_DEFINED_ACTION_RESPONSES\x12\x41\n\x0freturn_response\x18\x04 \x01(\x08\x42(\x92\x41%USE_API_USER_DEFINED_ACTION_RESPONSES:(\xe0@*\xe8@\x02\xf2@\x1cUSE_API_USER_DEFINED_ACTIONS\x80\x41\x01\"\xcf\x01\n\x16\x45xecuteServiceResponse\x12\x0f\n\x07\x63\x61ll_id\x18\x01 \x01(\r\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\x15\n\rerror_message\x18\x03 \x01(\t\x12H\n\rresponse_data\x18\x04 \x01(\x0c\x42\x31\x92\x41*USE_API_USER_DEFINED_ACTION_RESPONSES_JSON\xe0\xb5\x18\x01:2\xe0@\x83\x01\xe8@\x01\xf2@%USE_API_USER_DEFINED_ACTION_RESPONSES\x80\x41\x01\"\x8c\x02\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\x1b\n\x13\x64isabled_by_default\x18\x05 \x01(\x08\x12 \n\x04icon\x18\x06 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x08 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@+\xe8@\x01\xf2@\nUSE_CAMERA\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x92\x01\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:/\xe0@,\xe8@\x01\xf2@\nUSE_CAMERA\x8a\x41\x19StateResponseProtoMessage\"L\n\x12\x43\x61meraImageRequest\x12\x0e\n\x06single\x18\x01 \x01(\x08\x12\x0e\n\x06stream\x18\x02 \x01(\x08:\x16\xe0@-\xe8@\x02\xf2@\nUSE_CAMERA\x80\x41\x01\"\xfd\x08\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$\n\x1csupports_current_temperature\x18\x05 \x01(\x08\x12-\n%supports_two_point_target_temperature\x18\x06 \x01(\x08\x12\x43\n\x0fsupported_modes\x18\x07 \x03(\x0e\x32\x0c.ClimateModeB\x1c\xf2\xb5\x18\x18\x63limate::ClimateModeMask\x12\x1e\n\x16visual_min_temperature\x18\x08 \x01(\x02\x12\x1e\n\x16visual_max_temperature\x18\t \x01(\x02\x12&\n\x1evisual_target_temperature_step\x18\n \x01(\x02\x12 \n\x14legacy_supports_away\x18\x0b \x01(\x08\x42\x02\x18\x01\x12\x17\n\x0fsupports_action\x18\x0c \x01(\x08\x12M\n\x13supported_fan_modes\x18\r \x03(\x0e\x32\x0f.ClimateFanModeB\x1f\xf2\xb5\x18\x1b\x63limate::ClimateFanModeMask\x12S\n\x15supported_swing_modes\x18\x0e \x03(\x0e\x32\x11.ClimateSwingModeB!\xf2\xb5\x18\x1d\x63limate::ClimateSwingModeMask\x12\x41\n\x1asupported_custom_fan_modes\x18\x0f \x03(\tB\x1d\xf2\xb5\x18\x19std::vector\x12I\n\x11supported_presets\x18\x10 \x03(\x0e\x32\x0e.ClimatePresetB\x1e\xf2\xb5\x18\x1a\x63limate::ClimatePresetMask\x12?\n\x18supported_custom_presets\x18\x11 \x03(\tB\x1d\xf2\xb5\x18\x19std::vector\x12\x1b\n\x13\x64isabled_by_default\x18\x12 \x01(\x08\x12 \n\x04icon\x18\x13 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12(\n\x0f\x65ntity_category\x18\x14 \x01(\x0e\x32\x0f.EntityCategory\x12\'\n\x1fvisual_current_temperature_step\x18\x15 \x01(\x02\x12!\n\x19supports_current_humidity\x18\x16 \x01(\x08\x12 \n\x18supports_target_humidity\x18\x17 \x01(\x08\x12\x1b\n\x13visual_min_humidity\x18\x18 \x01(\x02\x12\x1b\n\x13visual_max_humidity\x18\x19 \x01(\x02\x12!\n\tdevice_id\x18\x1a \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\x15\n\rfeature_flags\x18\x1b \x01(\r:/\xe0@.\xe8@\x01\xf2@\x0bUSE_CLIMATE\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x9e\x04\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\x1e\n\x12unused_legacy_away\x18\x07 \x01(\x08\x42\x02\x18\x01\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\x12\x17\n\x0f\x63ustom_fan_mode\x18\x0b \x01(\t\x12\x1e\n\x06preset\x18\x0c \x01(\x0e\x32\x0e.ClimatePreset\x12\x15\n\rcustom_preset\x18\r \x01(\t\x12\x18\n\x10\x63urrent_humidity\x18\x0e \x01(\x02\x12\x17\n\x0ftarget_humidity\x18\x0f \x01(\x02\x12!\n\tdevice_id\x18\x10 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:3\xe0@/\xe8@\x01\xf2@\x0bUSE_CLIMATE\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x84\x06\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\"\n\x16unused_has_legacy_away\x18\n \x01(\x08\x42\x02\x18\x01\x12\x1e\n\x12unused_legacy_away\x18\x0b \x01(\x08\x42\x02\x18\x01\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\x12\x1b\n\x13has_custom_fan_mode\x18\x10 \x01(\x08\x12\x1d\n\x0f\x63ustom_fan_mode\x18\x11 \x01(\tB\x04\xe0\xb5\x18\x01\x12\x12\n\nhas_preset\x18\x12 \x01(\x08\x12\x1e\n\x06preset\x18\x13 \x01(\x0e\x32\x0e.ClimatePreset\x12\x19\n\x11has_custom_preset\x18\x14 \x01(\x08\x12\x1b\n\rcustom_preset\x18\x15 \x01(\tB\x04\xe0\xb5\x18\x01\x12\x1b\n\x13has_target_humidity\x18\x16 \x01(\x08\x12\x17\n\x0ftarget_humidity\x18\x17 \x01(\x02\x12!\n\tdevice_id\x18\x18 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:-\xe0@0\xe8@\x02\xf2@\x0bUSE_CLIMATE\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xd3\x03\n\x1fListEntitiesWaterHeaterResponse\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 \n\x04icon\x18\x04 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x05 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x06 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x07 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\x17\n\x0fmin_temperature\x18\x08 \x01(\x02\x12\x17\n\x0fmax_temperature\x18\t \x01(\x02\x12\x1f\n\x17target_temperature_step\x18\n \x01(\x02\x12P\n\x0fsupported_modes\x18\x0b \x03(\x0e\x32\x10.WaterHeaterModeB%\xf2\xb5\x18!water_heater::WaterHeaterModeMask\x12\x1a\n\x12supported_features\x18\x0c \x01(\r:5\xe0@\x84\x01\xe8@\x01\xf2@\x10USE_WATER_HEATER\x8a\x41\x18InfoResponseProtoMessage\"\xae\x02\n\x18WaterHeaterStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x1b\n\x13\x63urrent_temperature\x18\x02 \x01(\x02\x12\x1a\n\x12target_temperature\x18\x03 \x01(\x02\x12\x1e\n\x04mode\x18\x04 \x01(\x0e\x32\x10.WaterHeaterMode\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\r\n\x05state\x18\x06 \x01(\r\x12\x1e\n\x16target_temperature_low\x18\x07 \x01(\x02\x12\x1f\n\x17target_temperature_high\x18\x08 \x01(\x02:9\xe0@\x85\x01\xe8@\x01\xf2@\x10USE_WATER_HEATER\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xa0\x02\n\x19WaterHeaterCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x12\n\nhas_fields\x18\x02 \x01(\r\x12\x1e\n\x04mode\x18\x03 \x01(\x0e\x32\x10.WaterHeaterMode\x12\x1a\n\x12target_temperature\x18\x04 \x01(\x02\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\r\n\x05state\x18\x06 \x01(\r\x12\x1e\n\x16target_temperature_low\x18\x07 \x01(\x02\x12\x1f\n\x17target_temperature_high\x18\x08 \x01(\x02:3\xe0@\x86\x01\xe8@\x02\xf2@\x10USE_WATER_HEATER\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\x8e\x03\n\x1aListEntitiesNumberResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x11\n\tmin_value\x18\x06 \x01(\x02\x12\x11\n\tmax_value\x18\x07 \x01(\x02\x12\x0c\n\x04step\x18\x08 \x01(\x02\x12\x1b\n\x13\x64isabled_by_default\x18\t \x01(\x08\x12(\n\x0f\x65ntity_category\x18\n \x01(\x0e\x32\x0f.EntityCategory\x12\x1b\n\x13unit_of_measurement\x18\x0b \x01(\t\x12\x19\n\x04mode\x18\x0c \x01(\x0e\x32\x0b.NumberMode\x12\x14\n\x0c\x64\x65vice_class\x18\r \x01(\t\x12!\n\tdevice_id\x18\x0e \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@1\xe8@\x01\xf2@\nUSE_NUMBER\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x9f\x01\n\x13NumberStateResponse\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:2\xe0@2\xe8@\x01\xf2@\nUSE_NUMBER\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x83\x01\n\x14NumberCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x02\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@3\xe8@\x02\xf2@\nUSE_NUMBER\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xbc\x02\n\x1aListEntitiesSelectResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12.\n\x07options\x18\x06 \x03(\tB\x1d\xf2\xb5\x18\x19\x46ixedVector\x12\x1b\n\x13\x64isabled_by_default\x18\x07 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x08 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\t \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@4\xe8@\x01\xf2@\nUSE_SELECT\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x9f\x01\n\x13SelectStateResponse\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:2\xe0@5\xe8@\x01\xf2@\nUSE_SELECT\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x89\x01\n\x14SelectCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x13\n\x05state\x18\x02 \x01(\tB\x04\xe0\xb5\x18\x01\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@6\xe8@\x02\xf2@\nUSE_SELECT\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xcd\x02\n\x19ListEntitiesSirenResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12\r\n\x05tones\x18\x07 \x03(\t\x12\x19\n\x11supports_duration\x18\x08 \x01(\x08\x12\x17\n\x0fsupports_volume\x18\t \x01(\x08\x12(\n\x0f\x65ntity_category\x18\n \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x0b \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:-\xe0@7\xe8@\x01\xf2@\tUSE_SIREN\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x86\x01\n\x12SirenStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:1\xe0@8\xe8@\x01\xf2@\tUSE_SIREN\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x80\x02\n\x13SirenCommandRequest\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\x10\n\x08has_tone\x18\x04 \x01(\x08\x12\x0c\n\x04tone\x18\x05 \x01(\t\x12\x14\n\x0chas_duration\x18\x06 \x01(\x08\x12\x10\n\x08\x64uration\x18\x07 \x01(\r\x12\x12\n\nhas_volume\x18\x08 \x01(\x08\x12\x0e\n\x06volume\x18\t \x01(\x02\x12!\n\tdevice_id\x18\n \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:+\xe0@9\xe8@\x02\xf2@\tUSE_SIREN\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xe2\x02\n\x18ListEntitiesLockResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x15\n\rassumed_state\x18\x08 \x01(\x08\x12\x15\n\rsupports_open\x18\t \x01(\x08\x12\x15\n\rrequires_code\x18\n \x01(\x08\x12\x13\n\x0b\x63ode_format\x18\x0b \x01(\t\x12!\n\tdevice_id\x18\x0c \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@:\xe8@\x01\xf2@\x08USE_LOCK\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x90\x01\n\x11LockStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x19\n\x05state\x18\x02 \x01(\x0e\x32\n.LockState\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:0\xe0@;\xe8@\x01\xf2@\x08USE_LOCK\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xaf\x01\n\x12LockCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x1d\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\x0c.LockCommand\x12\x10\n\x08has_code\x18\x03 \x01(\x08\x12\x0c\n\x04\x63ode\x18\x04 \x01(\t\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:*\xe0@<\xe8@\x02\xf2@\x08USE_LOCK\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xa2\x02\n\x1aListEntitiesButtonResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x14\n\x0c\x64\x65vice_class\x18\x08 \x01(\t\x12!\n\tdevice_id\x18\t \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@=\xe8@\x01\xf2@\nUSE_BUTTON\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"t\n\x14\x42uttonCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12!\n\tdevice_id\x18\x02 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@>\xe8@\x02\xf2@\nUSE_BUTTON\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xae\x01\n\x1aMediaPlayerSupportedFormat\x12\x0e\n\x06\x66ormat\x18\x01 \x01(\t\x12\x13\n\x0bsample_rate\x18\x02 \x01(\r\x12\x14\n\x0cnum_channels\x18\x03 \x01(\r\x12*\n\x07purpose\x18\x04 \x01(\x0e\x32\x19.MediaPlayerFormatPurpose\x12\x14\n\x0csample_bytes\x18\x05 \x01(\r:\x13\xf2@\x10USE_MEDIA_PLAYER\"\xfe\x02\n\x1fListEntitiesMediaPlayerResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x16\n\x0esupports_pause\x18\x08 \x01(\x08\x12\x36\n\x11supported_formats\x18\t \x03(\x0b\x32\x1b.MediaPlayerSupportedFormat\x12!\n\tdevice_id\x18\n \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\x15\n\rfeature_flags\x18\x0b \x01(\r:4\xe0@?\xe8@\x01\xf2@\x10USE_MEDIA_PLAYER\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xc5\x01\n\x18MediaPlayerStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12 \n\x05state\x18\x02 \x01(\x0e\x32\x11.MediaPlayerState\x12\x0e\n\x06volume\x18\x03 \x01(\x02\x12\r\n\x05muted\x18\x04 \x01(\x08\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:8\xe0@@\xe8@\x01\xf2@\x10USE_MEDIA_PLAYER\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xb8\x02\n\x19MediaPlayerCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x13\n\x0bhas_command\x18\x02 \x01(\x08\x12$\n\x07\x63ommand\x18\x03 \x01(\x0e\x32\x13.MediaPlayerCommand\x12\x12\n\nhas_volume\x18\x04 \x01(\x08\x12\x0e\n\x06volume\x18\x05 \x01(\x02\x12\x15\n\rhas_media_url\x18\x06 \x01(\x08\x12\x11\n\tmedia_url\x18\x07 \x01(\t\x12\x18\n\x10has_announcement\x18\x08 \x01(\x08\x12\x14\n\x0c\x61nnouncement\x18\t \x01(\x08\x12!\n\tdevice_id\x18\n \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:2\xe0@A\xe8@\x02\xf2@\x10USE_MEDIA_PLAYER\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"X\n)SubscribeBluetoothLEAdvertisementsRequest\x12\r\n\x05\x66lags\x18\x01 \x01(\r:\x1c\xe0@B\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"O\n\x14\x42luetoothServiceData\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x17\n\x0blegacy_data\x18\x02 \x03(\rB\x02\x18\x01\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c:\x02\x18\x01\"\xfe\x01\n BluetoothLEAdvertisementResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0c\n\x04name\x18\x02 \x01(\x0c\x12\x0c\n\x04rssi\x18\x03 \x01(\x11\x12\x15\n\rservice_uuids\x18\x04 \x03(\t\x12+\n\x0cservice_data\x18\x05 \x03(\x0b\x32\x15.BluetoothServiceData\x12\x30\n\x11manufacturer_data\x18\x06 \x03(\x0b\x32\x15.BluetoothServiceData\x12\x14\n\x0c\x61\x64\x64ress_type\x18\x07 \x01(\r:!\x18\x01\xe0@C\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\x80\x41\x01\"f\n\x1b\x42luetoothLERawAdvertisement\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0c\n\x04rssi\x18\x02 \x01(\x11\x12\x14\n\x0c\x61\x64\x64ress_type\x18\x03 \x01(\r\x12\x12\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x42\x04\xb8\xb5\x18>\"\xab\x01\n$BluetoothLERawAdvertisementsResponse\x12\x62\n\x0e\x61\x64vertisements\x18\x01 \x03(\x0b\x32\x1c.BluetoothLERawAdvertisementB,\xda\xb5\x18(BLUETOOTH_PROXY_ADVERTISEMENT_BATCH_SIZE:\x1f\xe0@]\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\x80\x41\x01\"\xaa\x01\n\x16\x42luetoothDeviceRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x31\n\x0crequest_type\x18\x02 \x01(\x0e\x32\x1b.BluetoothDeviceRequestType\x12\x18\n\x10has_address_type\x18\x03 \x01(\x08\x12\x14\n\x0c\x61\x64\x64ress_type\x18\x04 \x01(\r:\x1c\xe0@D\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"\x81\x01\n!BluetoothDeviceConnectionResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x11\n\tconnected\x18\x02 \x01(\x08\x12\x0b\n\x03mtu\x18\x03 \x01(\r\x12\r\n\x05\x65rror\x18\x04 \x01(\x05:\x1c\xe0@E\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"P\n\x1f\x42luetoothGATTGetServicesRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04:\x1c\xe0@F\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"U\n\x17\x42luetoothGATTDescriptor\x12\x16\n\x04uuid\x18\x01 \x03(\x04\x42\x08\xb8\xb5\x18\x02\xc8\xb5\x18\x01\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x12\n\nshort_uuid\x18\x03 \x01(\r\"\xa2\x01\n\x1b\x42luetoothGATTCharacteristic\x12\x16\n\x04uuid\x18\x01 \x03(\x04\x42\x08\xb8\xb5\x18\x02\xc8\xb5\x18\x01\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x12\n\nproperties\x18\x03 \x01(\r\x12\x33\n\x0b\x64\x65scriptors\x18\x04 \x03(\x0b\x32\x18.BluetoothGATTDescriptorB\x04\xe8\xb5\x18\x01\x12\x12\n\nshort_uuid\x18\x05 \x01(\r\"\x8f\x01\n\x14\x42luetoothGATTService\x12\x16\n\x04uuid\x18\x01 \x03(\x04\x42\x08\xb8\xb5\x18\x02\xc8\xb5\x18\x01\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12;\n\x0f\x63haracteristics\x18\x03 \x03(\x0b\x32\x1c.BluetoothGATTCharacteristicB\x04\xe8\xb5\x18\x01\x12\x12\n\nshort_uuid\x18\x04 \x01(\r\"z\n BluetoothGATTGetServicesResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\'\n\x08services\x18\x02 \x03(\x0b\x32\x15.BluetoothGATTService:\x1c\xe0@G\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"U\n$BluetoothGATTGetServicesDoneResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04:\x1c\xe0@H\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"Y\n\x18\x42luetoothGATTReadRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r:\x1c\xe0@I\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"h\n\x19\x42luetoothGATTReadResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c:\x1c\xe0@J\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"\x80\x01\n\x19\x42luetoothGATTWriteRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x10\n\x08response\x18\x03 \x01(\x08\x12\x12\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x42\x04\xe0\xb5\x18\x01:\x1c\xe0@K\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"c\n\"BluetoothGATTReadDescriptorRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r:\x1c\xe0@L\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"x\n#BluetoothGATTWriteDescriptorRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x12\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x42\x04\xe0\xb5\x18\x01:\x1c\xe0@M\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"k\n\x1a\x42luetoothGATTNotifyRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x0e\n\x06\x65nable\x18\x03 \x01(\x08:\x1c\xe0@N\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"n\n\x1f\x42luetoothGATTNotifyDataResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c:\x1c\xe0@O\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"H\n(SubscribeBluetoothConnectionsFreeRequest:\x1c\xe0@P\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"\x99\x01\n BluetoothConnectionsFreeResponse\x12\x0c\n\x04\x66ree\x18\x01 \x01(\r\x12\r\n\x05limit\x18\x02 \x01(\r\x12:\n\tallocated\x18\x03 \x03(\x04\x42\'\xc8\xb5\x18\x01\xd2\xb5\x18\x1f\x42LUETOOTH_PROXY_MAX_CONNECTIONS:\x1c\xe0@Q\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"j\n\x1a\x42luetoothGATTErrorResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\r\n\x05\x65rror\x18\x03 \x01(\x05:\x1c\xe0@R\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"[\n\x1a\x42luetoothGATTWriteResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r:\x1c\xe0@S\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"\\\n\x1b\x42luetoothGATTNotifyResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r:\x1c\xe0@T\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"n\n\x1e\x42luetoothDevicePairingResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06paired\x18\x02 \x01(\x08\x12\r\n\x05\x65rror\x18\x03 \x01(\x05:\x1c\xe0@U\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"q\n BluetoothDeviceUnpairingResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\r\n\x05\x65rror\x18\x03 \x01(\x05:\x1c\xe0@V\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"K\n+UnsubscribeBluetoothLEAdvertisementsRequest:\x1c\xe0@W\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"r\n!BluetoothDeviceClearCacheResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\r\n\x05\x65rror\x18\x03 \x01(\x05:\x1c\xe0@X\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"\xb9\x01\n\x1d\x42luetoothScannerStateResponse\x12%\n\x05state\x18\x01 \x01(\x0e\x32\x16.BluetoothScannerState\x12#\n\x04mode\x18\x02 \x01(\x0e\x32\x15.BluetoothScannerMode\x12.\n\x0f\x63onfigured_mode\x18\x03 \x01(\x0e\x32\x15.BluetoothScannerMode:\x1c\xe0@~\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"c\n\x1e\x42luetoothScannerSetModeRequest\x12#\n\x04mode\x18\x01 \x01(\x0e\x32\x15.BluetoothScannerMode:\x1c\xe0@\x7f\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"`\n\x1eSubscribeVoiceAssistantRequest\x12\x11\n\tsubscribe\x18\x01 \x01(\x08\x12\r\n\x05\x66lags\x18\x02 \x01(\r:\x1c\xe0@Y\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"l\n\x1bVoiceAssistantAudioSettings\x12\x1f\n\x17noise_suppression_level\x18\x01 \x01(\r\x12\x11\n\tauto_gain\x18\x02 \x01(\r\x12\x19\n\x11volume_multiplier\x18\x03 \x01(\x02\"\xbc\x01\n\x15VoiceAssistantRequest\x12\r\n\x05start\x18\x01 \x01(\x08\x12\x17\n\x0f\x63onversation_id\x18\x02 \x01(\t\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x34\n\x0e\x61udio_settings\x18\x04 \x01(\x0b\x32\x1c.VoiceAssistantAudioSettings\x12\x18\n\x10wake_word_phrase\x18\x05 \x01(\t:\x1c\xe0@Z\xe8@\x01\xf2@\x13USE_VOICE_ASSISTANT\"S\n\x16VoiceAssistantResponse\x12\x0c\n\x04port\x18\x01 \x01(\r\x12\r\n\x05\x65rror\x18\x02 \x01(\x08:\x1c\xe0@[\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"6\n\x17VoiceAssistantEventData\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x8d\x01\n\x1bVoiceAssistantEventResponse\x12(\n\nevent_type\x18\x01 \x01(\x0e\x32\x14.VoiceAssistantEvent\x12&\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32\x18.VoiceAssistantEventData:\x1c\xe0@\\\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"N\n\x13VoiceAssistantAudio\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x08:\x1c\xe0@j\xe8@\x00\xf2@\x13USE_VOICE_ASSISTANT\"\xcf\x01\n VoiceAssistantTimerEventResponse\x12-\n\nevent_type\x18\x01 \x01(\x0e\x32\x19.VoiceAssistantTimerEvent\x12\x10\n\x08timer_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x15\n\rtotal_seconds\x18\x04 \x01(\r\x12\x14\n\x0cseconds_left\x18\x05 \x01(\r\x12\x11\n\tis_active\x18\x06 \x01(\x08:\x1c\xe0@s\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"\x97\x01\n\x1dVoiceAssistantAnnounceRequest\x12\x10\n\x08media_id\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\x1c\n\x14preannounce_media_id\x18\x03 \x01(\t\x12\x1a\n\x12start_conversation\x18\x04 \x01(\x08:\x1c\xe0@w\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"O\n\x1eVoiceAssistantAnnounceFinished\x12\x0f\n\x07success\x18\x01 \x01(\x08:\x1c\xe0@x\xe8@\x01\xf2@\x13USE_VOICE_ASSISTANT\"R\n\x16VoiceAssistantWakeWord\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\twake_word\x18\x02 \x01(\t\x12\x19\n\x11trained_languages\x18\x03 \x03(\t\"\xa3\x01\n\x1eVoiceAssistantExternalWakeWord\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\twake_word\x18\x02 \x01(\t\x12\x19\n\x11trained_languages\x18\x03 \x03(\t\x12\x12\n\nmodel_type\x18\x04 \x01(\t\x12\x12\n\nmodel_size\x18\x05 \x01(\r\x12\x12\n\nmodel_hash\x18\x06 \x01(\t\x12\x0b\n\x03url\x18\x07 \x01(\t\"\x80\x01\n\"VoiceAssistantConfigurationRequest\x12<\n\x13\x65xternal_wake_words\x18\x01 \x03(\x0b\x32\x1f.VoiceAssistantExternalWakeWord:\x1c\xe0@y\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"\xc5\x01\n#VoiceAssistantConfigurationResponse\x12\x35\n\x14\x61vailable_wake_words\x18\x01 \x03(\x0b\x32\x17.VoiceAssistantWakeWord\x12*\n\x11\x61\x63tive_wake_words\x18\x02 \x03(\tB\x0f\x8a\xb5\x18\x0bstd::vector\x12\x1d\n\x15max_active_wake_words\x18\x03 \x01(\r:\x1c\xe0@z\xe8@\x01\xf2@\x13USE_VOICE_ASSISTANT\"Y\n\x1eVoiceAssistantSetConfiguration\x12\x19\n\x11\x61\x63tive_wake_words\x18\x01 \x03(\t:\x1c\xe0@{\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"\xf5\x02\n%ListEntitiesAlarmControlPanelResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x1a\n\x12supported_features\x18\x08 \x01(\r\x12\x15\n\rrequires_code\x18\t \x01(\x08\x12\x1c\n\x14requires_code_to_arm\x18\n \x01(\x08\x12!\n\tdevice_id\x18\x0b \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:;\xe0@^\xe8@\x01\xf2@\x17USE_ALARM_CONTROL_PANEL\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xb9\x01\n\x1e\x41larmControlPanelStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12&\n\x05state\x18\x02 \x01(\x0e\x32\x17.AlarmControlPanelState\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:?\xe0@_\xe8@\x01\xf2@\x17USE_ALARM_CONTROL_PANEL\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xcb\x01\n\x1f\x41larmControlPanelCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12/\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\x1e.AlarmControlPanelStateCommand\x12\x0c\n\x04\x63ode\x18\x03 \x01(\t\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:9\xe0@`\xe8@\x02\xf2@\x17USE_ALARM_CONTROL_PANEL\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xda\x02\n\x18ListEntitiesTextResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x12\n\nmin_length\x18\x08 \x01(\r\x12\x12\n\nmax_length\x18\t \x01(\r\x12\x0f\n\x07pattern\x18\n \x01(\t\x12\x17\n\x04mode\x18\x0b \x01(\x0e\x32\t.TextMode\x12!\n\tdevice_id\x18\x0c \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@a\xe8@\x01\xf2@\x08USE_TEXT\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x9b\x01\n\x11TextStateResponse\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:0\xe0@b\xe8@\x01\xf2@\x08USE_TEXT\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x7f\n\x12TextCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\t\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:*\xe0@c\xe8@\x02\xf2@\x08USE_TEXT\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\x91\x02\n\x18ListEntitiesDateResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x08 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:5\xe0@d\xe8@\x01\xf2@\x11USE_DATETIME_DATE\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xbf\x01\n\x11\x44\x61teStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x15\n\rmissing_state\x18\x02 \x01(\x08\x12\x0c\n\x04year\x18\x03 \x01(\r\x12\r\n\x05month\x18\x04 \x01(\r\x12\x0b\n\x03\x64\x61y\x18\x05 \x01(\r\x12!\n\tdevice_id\x18\x06 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:9\xe0@e\xe8@\x01\xf2@\x11USE_DATETIME_DATE\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xa3\x01\n\x12\x44\x61teCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x0c\n\x04year\x18\x02 \x01(\r\x12\r\n\x05month\x18\x03 \x01(\r\x12\x0b\n\x03\x64\x61y\x18\x04 \x01(\r\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:3\xe0@f\xe8@\x02\xf2@\x11USE_DATETIME_DATE\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\x91\x02\n\x18ListEntitiesTimeResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x08 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:5\xe0@g\xe8@\x01\xf2@\x11USE_DATETIME_TIME\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xc3\x01\n\x11TimeStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x15\n\rmissing_state\x18\x02 \x01(\x08\x12\x0c\n\x04hour\x18\x03 \x01(\r\x12\x0e\n\x06minute\x18\x04 \x01(\r\x12\x0e\n\x06second\x18\x05 \x01(\r\x12!\n\tdevice_id\x18\x06 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:9\xe0@h\xe8@\x01\xf2@\x11USE_DATETIME_TIME\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xa7\x01\n\x12TimeCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x0c\n\x04hour\x18\x02 \x01(\r\x12\x0e\n\x06minute\x18\x03 \x01(\r\x12\x0e\n\x06second\x18\x04 \x01(\r\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:3\xe0@i\xe8@\x02\xf2@\x11USE_DATETIME_TIME\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xd4\x02\n\x19ListEntitiesEventResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x14\n\x0c\x64\x65vice_class\x18\x08 \x01(\t\x12\x32\n\x0b\x65vent_types\x18\t \x03(\tB\x1d\xf2\xb5\x18\x19\x46ixedVector\x12!\n\tdevice_id\x18\n \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:-\xe0@k\xe8@\x01\xf2@\tUSE_EVENT\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x83\x01\n\rEventResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x12\n\nevent_type\x18\x02 \x01(\t\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@l\xe8@\x01\xf2@\tUSE_EVENT\x8a\x41\x19StateResponseProtoMessage\"\xe9\x02\n\x19ListEntitiesValveResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x14\n\x0c\x64\x65vice_class\x18\x08 \x01(\t\x12\x15\n\rassumed_state\x18\t \x01(\x08\x12\x19\n\x11supports_position\x18\n \x01(\x08\x12\x15\n\rsupports_stop\x18\x0b \x01(\x08\x12!\n\tdevice_id\x18\x0c \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:-\xe0@m\xe8@\x01\xf2@\tUSE_VALVE\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xb5\x01\n\x12ValveStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x10\n\x08position\x18\x02 \x01(\x02\x12*\n\x11\x63urrent_operation\x18\x03 \x01(\x0e\x32\x0f.ValveOperation\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:1\xe0@n\xe8@\x01\xf2@\tUSE_VALVE\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xa8\x01\n\x13ValveCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x14\n\x0chas_position\x18\x02 \x01(\x08\x12\x10\n\x08position\x18\x03 \x01(\x02\x12\x0c\n\x04stop\x18\x04 \x01(\x08\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:+\xe0@o\xe8@\x02\xf2@\tUSE_VALVE\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\x99\x02\n\x1cListEntitiesDateTimeResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x08 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:9\xe0@p\xe8@\x01\xf2@\x15USE_DATETIME_DATETIME\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xb4\x01\n\x15\x44\x61teTimeStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x15\n\rmissing_state\x18\x02 \x01(\x08\x12\x15\n\repoch_seconds\x18\x03 \x01(\x07\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:=\xe0@q\xe8@\x01\xf2@\x15USE_DATETIME_DATETIME\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x98\x01\n\x16\x44\x61teTimeCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x15\n\repoch_seconds\x18\x02 \x01(\x07\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:7\xe0@r\xe8@\x02\xf2@\x15USE_DATETIME_DATETIME\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xa2\x02\n\x1aListEntitiesUpdateResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x14\n\x0c\x64\x65vice_class\x18\x08 \x01(\t\x12!\n\tdevice_id\x18\t \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@t\xe8@\x01\xf2@\nUSE_UPDATE\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xbb\x02\n\x13UpdateStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x15\n\rmissing_state\x18\x02 \x01(\x08\x12\x13\n\x0bin_progress\x18\x03 \x01(\x08\x12\x14\n\x0chas_progress\x18\x04 \x01(\x08\x12\x10\n\x08progress\x18\x05 \x01(\x02\x12\x17\n\x0f\x63urrent_version\x18\x06 \x01(\t\x12\x16\n\x0elatest_version\x18\x07 \x01(\t\x12\r\n\x05title\x18\x08 \x01(\t\x12\x17\n\x0frelease_summary\x18\t \x01(\t\x12\x13\n\x0brelease_url\x18\n \x01(\t\x12!\n\tdevice_id\x18\x0b \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:2\xe0@u\xe8@\x01\xf2@\nUSE_UPDATE\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x95\x01\n\x14UpdateCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x1f\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\x0e.UpdateCommand\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@v\xe8@\x02\xf2@\nUSE_UPDATE\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"C\n\x0fZWaveProxyFrame\x12\x12\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x42\x04\xe0\xb5\x18\x01:\x1c\xe0@\x80\x01\xe8@\x00\xf2@\x0fUSE_ZWAVE_PROXY\x80\x41\x01\"h\n\x11ZWaveProxyRequest\x12$\n\x04type\x18\x01 \x01(\x0e\x32\x16.ZWaveProxyRequestType\x12\x12\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x42\x04\xe0\xb5\x18\x01:\x19\xe0@\x81\x01\xe8@\x00\xf2@\x0fUSE_ZWAVE_PROXY*f\n\x0e\x45ntityCategory\x12\x18\n\x14\x45NTITY_CATEGORY_NONE\x10\x00\x12\x1a\n\x16\x45NTITY_CATEGORY_CONFIG\x10\x01\x12\x1e\n\x1a\x45NTITY_CATEGORY_DIAGNOSTIC\x10\x02*R\n\x10LegacyCoverState\x12\x1b\n\x17LEGACY_COVER_STATE_OPEN\x10\x00\x12\x1d\n\x19LEGACY_COVER_STATE_CLOSED\x10\x01\x1a\x02\x18\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*v\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\x1a\x02\x18\x01*K\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\x1a\x02\x18\x01*D\n\x0c\x46\x61nDirection\x12\x19\n\x15\x46\x41N_DIRECTION_FORWARD\x10\x00\x12\x19\n\x15\x46\x41N_DIRECTION_REVERSE\x10\x01*\xc7\x02\n\tColorMode\x12\x16\n\x12\x43OLOR_MODE_UNKNOWN\x10\x00\x12\x15\n\x11\x43OLOR_MODE_ON_OFF\x10\x01\x12 \n\x1c\x43OLOR_MODE_LEGACY_BRIGHTNESS\x10\x02\x12\x19\n\x15\x43OLOR_MODE_BRIGHTNESS\x10\x03\x12\x14\n\x10\x43OLOR_MODE_WHITE\x10\x07\x12 \n\x1c\x43OLOR_MODE_COLOR_TEMPERATURE\x10\x0b\x12\x1e\n\x1a\x43OLOR_MODE_COLD_WARM_WHITE\x10\x13\x12\x12\n\x0e\x43OLOR_MODE_RGB\x10#\x12\x18\n\x14\x43OLOR_MODE_RGB_WHITE\x10\'\x12$\n COLOR_MODE_RGB_COLOR_TEMPERATURE\x10/\x12\"\n\x1e\x43OLOR_MODE_RGB_COLD_WARM_WHITE\x10\x33*\xa1\x01\n\x10SensorStateClass\x12\x14\n\x10STATE_CLASS_NONE\x10\x00\x12\x1b\n\x17STATE_CLASS_MEASUREMENT\x10\x01\x12 \n\x1cSTATE_CLASS_TOTAL_INCREASING\x10\x02\x12\x15\n\x11STATE_CLASS_TOTAL\x10\x03\x12!\n\x1dSTATE_CLASS_MEASUREMENT_ANGLE\x10\x04*Y\n\x13SensorLastResetType\x12\x13\n\x0fLAST_RESET_NONE\x10\x00\x12\x14\n\x10LAST_RESET_NEVER\x10\x01\x12\x13\n\x0fLAST_RESET_AUTO\x10\x02\x1a\x02\x18\x01*\xb9\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\x14\n\x10LOG_LEVEL_CONFIG\x10\x04\x12\x13\n\x0fLOG_LEVEL_DEBUG\x10\x05\x12\x15\n\x11LOG_LEVEL_VERBOSE\x10\x06\x12\x1a\n\x16LOG_LEVEL_VERY_VERBOSE\x10\x07*\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*\x8c\x01\n\x14SupportsResponseType\x12\x1a\n\x16SUPPORTS_RESPONSE_NONE\x10\x00\x12\x1e\n\x1aSUPPORTS_RESPONSE_OPTIONAL\x10\x01\x12\x1a\n\x16SUPPORTS_RESPONSE_ONLY\x10\x02\x12\x1c\n\x18SUPPORTS_RESPONSE_STATUS\x10\x64*\xb5\x01\n\x0b\x43limateMode\x12\x14\n\x10\x43LIMATE_MODE_OFF\x10\x00\x12\x1a\n\x16\x43LIMATE_MODE_HEAT_COOL\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\x12\x15\n\x11\x43LIMATE_MODE_AUTO\x10\x06*\xf1\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\x12\x15\n\x11\x43LIMATE_FAN_QUIET\x10\t*{\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_SWING_HORIZONTAL\x10\x03*\xab\x01\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\x12\x17\n\x13\x43LIMATE_ACTION_IDLE\x10\x04\x12\x19\n\x15\x43LIMATE_ACTION_DRYING\x10\x05\x12\x16\n\x12\x43LIMATE_ACTION_FAN\x10\x06*\xdf\x01\n\rClimatePreset\x12\x17\n\x13\x43LIMATE_PRESET_NONE\x10\x00\x12\x17\n\x13\x43LIMATE_PRESET_HOME\x10\x01\x12\x17\n\x13\x43LIMATE_PRESET_AWAY\x10\x02\x12\x18\n\x14\x43LIMATE_PRESET_BOOST\x10\x03\x12\x1a\n\x16\x43LIMATE_PRESET_COMFORT\x10\x04\x12\x16\n\x12\x43LIMATE_PRESET_ECO\x10\x05\x12\x18\n\x14\x43LIMATE_PRESET_SLEEP\x10\x06\x12\x1b\n\x17\x43LIMATE_PRESET_ACTIVITY\x10\x07*\xe9\x01\n\x0fWaterHeaterMode\x12\x19\n\x15WATER_HEATER_MODE_OFF\x10\x00\x12\x19\n\x15WATER_HEATER_MODE_ECO\x10\x01\x12\x1e\n\x1aWATER_HEATER_MODE_ELECTRIC\x10\x02\x12!\n\x1dWATER_HEATER_MODE_PERFORMANCE\x10\x03\x12!\n\x1dWATER_HEATER_MODE_HIGH_DEMAND\x10\x04\x12\x1f\n\x1bWATER_HEATER_MODE_HEAT_PUMP\x10\x05\x12\x19\n\x15WATER_HEATER_MODE_GAS\x10\x06*\xa2\x02\n\x1aWaterHeaterCommandHasField\x12!\n\x1dWATER_HEATER_COMMAND_HAS_NONE\x10\x00\x12!\n\x1dWATER_HEATER_COMMAND_HAS_MODE\x10\x01\x12/\n+WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE\x10\x02\x12\"\n\x1eWATER_HEATER_COMMAND_HAS_STATE\x10\x04\x12\x33\n/WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_LOW\x10\x08\x12\x34\n0WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_HIGH\x10\x10*O\n\nNumberMode\x12\x14\n\x10NUMBER_MODE_AUTO\x10\x00\x12\x13\n\x0fNUMBER_MODE_BOX\x10\x01\x12\x16\n\x12NUMBER_MODE_SLIDER\x10\x02*\x99\x01\n\tLockState\x12\x13\n\x0fLOCK_STATE_NONE\x10\x00\x12\x15\n\x11LOCK_STATE_LOCKED\x10\x01\x12\x17\n\x13LOCK_STATE_UNLOCKED\x10\x02\x12\x15\n\x11LOCK_STATE_JAMMED\x10\x03\x12\x16\n\x12LOCK_STATE_LOCKING\x10\x04\x12\x18\n\x14LOCK_STATE_UNLOCKING\x10\x05*<\n\x0bLockCommand\x12\x0f\n\x0bLOCK_UNLOCK\x10\x00\x12\r\n\tLOCK_LOCK\x10\x01\x12\r\n\tLOCK_OPEN\x10\x02*\xe5\x01\n\x10MediaPlayerState\x12\x1b\n\x17MEDIA_PLAYER_STATE_NONE\x10\x00\x12\x1b\n\x17MEDIA_PLAYER_STATE_IDLE\x10\x01\x12\x1e\n\x1aMEDIA_PLAYER_STATE_PLAYING\x10\x02\x12\x1d\n\x19MEDIA_PLAYER_STATE_PAUSED\x10\x03\x12!\n\x1dMEDIA_PLAYER_STATE_ANNOUNCING\x10\x04\x12\x1a\n\x16MEDIA_PLAYER_STATE_OFF\x10\x05\x12\x19\n\x15MEDIA_PLAYER_STATE_ON\x10\x06*\xf7\x03\n\x12MediaPlayerCommand\x12\x1d\n\x19MEDIA_PLAYER_COMMAND_PLAY\x10\x00\x12\x1e\n\x1aMEDIA_PLAYER_COMMAND_PAUSE\x10\x01\x12\x1d\n\x19MEDIA_PLAYER_COMMAND_STOP\x10\x02\x12\x1d\n\x19MEDIA_PLAYER_COMMAND_MUTE\x10\x03\x12\x1f\n\x1bMEDIA_PLAYER_COMMAND_UNMUTE\x10\x04\x12\x1f\n\x1bMEDIA_PLAYER_COMMAND_TOGGLE\x10\x05\x12\"\n\x1eMEDIA_PLAYER_COMMAND_VOLUME_UP\x10\x06\x12$\n MEDIA_PLAYER_COMMAND_VOLUME_DOWN\x10\x07\x12 \n\x1cMEDIA_PLAYER_COMMAND_ENQUEUE\x10\x08\x12#\n\x1fMEDIA_PLAYER_COMMAND_REPEAT_ONE\x10\t\x12#\n\x1fMEDIA_PLAYER_COMMAND_REPEAT_OFF\x10\n\x12\'\n#MEDIA_PLAYER_COMMAND_CLEAR_PLAYLIST\x10\x0b\x12 \n\x1cMEDIA_PLAYER_COMMAND_TURN_ON\x10\x0c\x12!\n\x1dMEDIA_PLAYER_COMMAND_TURN_OFF\x10\r*q\n\x18MediaPlayerFormatPurpose\x12\'\n#MEDIA_PLAYER_FORMAT_PURPOSE_DEFAULT\x10\x00\x12,\n(MEDIA_PLAYER_FORMAT_PURPOSE_ANNOUNCEMENT\x10\x01*\xef\x02\n\x1a\x42luetoothDeviceRequestType\x12-\n%BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT\x10\x00\x1a\x02\x08\x01\x12,\n(BLUETOOTH_DEVICE_REQUEST_TYPE_DISCONNECT\x10\x01\x12&\n\"BLUETOOTH_DEVICE_REQUEST_TYPE_PAIR\x10\x02\x12(\n$BLUETOOTH_DEVICE_REQUEST_TYPE_UNPAIR\x10\x03\x12\x37\n3BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT_V3_WITH_CACHE\x10\x04\x12:\n6BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT_V3_WITHOUT_CACHE\x10\x05\x12-\n)BLUETOOTH_DEVICE_REQUEST_TYPE_CLEAR_CACHE\x10\x06*\xf3\x01\n\x15\x42luetoothScannerState\x12 \n\x1c\x42LUETOOTH_SCANNER_STATE_IDLE\x10\x00\x12$\n BLUETOOTH_SCANNER_STATE_STARTING\x10\x01\x12#\n\x1f\x42LUETOOTH_SCANNER_STATE_RUNNING\x10\x02\x12\"\n\x1e\x42LUETOOTH_SCANNER_STATE_FAILED\x10\x03\x12$\n BLUETOOTH_SCANNER_STATE_STOPPING\x10\x04\x12#\n\x1f\x42LUETOOTH_SCANNER_STATE_STOPPED\x10\x05*]\n\x14\x42luetoothScannerMode\x12\"\n\x1e\x42LUETOOTH_SCANNER_MODE_PASSIVE\x10\x00\x12!\n\x1d\x42LUETOOTH_SCANNER_MODE_ACTIVE\x10\x01*j\n\x1bVoiceAssistantSubscribeFlag\x12\"\n\x1eVOICE_ASSISTANT_SUBSCRIBE_NONE\x10\x00\x12\'\n#VOICE_ASSISTANT_SUBSCRIBE_API_AUDIO\x10\x01*\x8d\x01\n\x19VoiceAssistantRequestFlag\x12 \n\x1cVOICE_ASSISTANT_REQUEST_NONE\x10\x00\x12#\n\x1fVOICE_ASSISTANT_REQUEST_USE_VAD\x10\x01\x12)\n%VOICE_ASSISTANT_REQUEST_USE_WAKE_WORD\x10\x02*\xa1\x04\n\x13VoiceAssistantEvent\x12\x19\n\x15VOICE_ASSISTANT_ERROR\x10\x00\x12\x1d\n\x19VOICE_ASSISTANT_RUN_START\x10\x01\x12\x1b\n\x17VOICE_ASSISTANT_RUN_END\x10\x02\x12\x1d\n\x19VOICE_ASSISTANT_STT_START\x10\x03\x12\x1b\n\x17VOICE_ASSISTANT_STT_END\x10\x04\x12 \n\x1cVOICE_ASSISTANT_INTENT_START\x10\x05\x12\x1e\n\x1aVOICE_ASSISTANT_INTENT_END\x10\x06\x12\x1d\n\x19VOICE_ASSISTANT_TTS_START\x10\x07\x12\x1b\n\x17VOICE_ASSISTANT_TTS_END\x10\x08\x12#\n\x1fVOICE_ASSISTANT_WAKE_WORD_START\x10\t\x12!\n\x1dVOICE_ASSISTANT_WAKE_WORD_END\x10\n\x12!\n\x1dVOICE_ASSISTANT_STT_VAD_START\x10\x0b\x12\x1f\n\x1bVOICE_ASSISTANT_STT_VAD_END\x10\x0c\x12$\n VOICE_ASSISTANT_TTS_STREAM_START\x10\x62\x12\"\n\x1eVOICE_ASSISTANT_TTS_STREAM_END\x10\x63\x12#\n\x1fVOICE_ASSISTANT_INTENT_PROGRESS\x10\x64*\xa9\x01\n\x18VoiceAssistantTimerEvent\x12!\n\x1dVOICE_ASSISTANT_TIMER_STARTED\x10\x00\x12!\n\x1dVOICE_ASSISTANT_TIMER_UPDATED\x10\x01\x12#\n\x1fVOICE_ASSISTANT_TIMER_CANCELLED\x10\x02\x12\"\n\x1eVOICE_ASSISTANT_TIMER_FINISHED\x10\x03*\xb3\x02\n\x16\x41larmControlPanelState\x12\x18\n\x14\x41LARM_STATE_DISARMED\x10\x00\x12\x1a\n\x16\x41LARM_STATE_ARMED_HOME\x10\x01\x12\x1a\n\x16\x41LARM_STATE_ARMED_AWAY\x10\x02\x12\x1b\n\x17\x41LARM_STATE_ARMED_NIGHT\x10\x03\x12\x1e\n\x1a\x41LARM_STATE_ARMED_VACATION\x10\x04\x12#\n\x1f\x41LARM_STATE_ARMED_CUSTOM_BYPASS\x10\x05\x12\x17\n\x13\x41LARM_STATE_PENDING\x10\x06\x12\x16\n\x12\x41LARM_STATE_ARMING\x10\x07\x12\x19\n\x15\x41LARM_STATE_DISARMING\x10\x08\x12\x19\n\x15\x41LARM_STATE_TRIGGERED\x10\t*\x98\x02\n\x1d\x41larmControlPanelStateCommand\x12\x1e\n\x1a\x41LARM_CONTROL_PANEL_DISARM\x10\x00\x12 \n\x1c\x41LARM_CONTROL_PANEL_ARM_AWAY\x10\x01\x12 \n\x1c\x41LARM_CONTROL_PANEL_ARM_HOME\x10\x02\x12!\n\x1d\x41LARM_CONTROL_PANEL_ARM_NIGHT\x10\x03\x12$\n ALARM_CONTROL_PANEL_ARM_VACATION\x10\x04\x12)\n%ALARM_CONTROL_PANEL_ARM_CUSTOM_BYPASS\x10\x05\x12\x1f\n\x1b\x41LARM_CONTROL_PANEL_TRIGGER\x10\x06*6\n\x08TextMode\x12\x12\n\x0eTEXT_MODE_TEXT\x10\x00\x12\x16\n\x12TEXT_MODE_PASSWORD\x10\x01*j\n\x0eValveOperation\x12\x18\n\x14VALVE_OPERATION_IDLE\x10\x00\x12\x1e\n\x1aVALVE_OPERATION_IS_OPENING\x10\x01\x12\x1e\n\x1aVALVE_OPERATION_IS_CLOSING\x10\x02*]\n\rUpdateCommand\x12\x17\n\x13UPDATE_COMMAND_NONE\x10\x00\x12\x19\n\x15UPDATE_COMMAND_UPDATE\x10\x01\x12\x18\n\x14UPDATE_COMMAND_CHECK\x10\x02*\x96\x01\n\x15ZWaveProxyRequestType\x12&\n\"ZWAVE_PROXY_REQUEST_TYPE_SUBSCRIBE\x10\x00\x12(\n$ZWAVE_PROXY_REQUEST_TYPE_UNSUBSCRIBE\x10\x01\x12+\n\'ZWAVE_PROXY_REQUEST_TYPE_HOME_ID_CHANGE\x10\x02\x32\xc8\x17\n\rAPIConnection\x12.\n\x05hello\x12\r.HelloRequest\x1a\x0e.HelloResponse\"\x06\xf0@\x00\xf8@\x00\x12G\n\x0c\x61uthenticate\x12\x16.AuthenticationRequest\x1a\x17.AuthenticationResponse\"\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\x0f\x65xecute_service\x12\x16.ExecuteServiceRequest\x1a\x05.void\"\x00\x12[\n\x18noise_encryption_set_key\x12\x1d.NoiseEncryptionSetKeyRequest\x1a\x1e.NoiseEncryptionSetKeyResponse\"\x00\x12\x30\n\x0e\x62utton_command\x12\x15.ButtonCommandRequest\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\x12.\n\rcover_command\x12\x14.CoverCommandRequest\x1a\x05.void\"\x00\x12,\n\x0c\x64\x61te_command\x12\x13.DateCommandRequest\x1a\x05.void\"\x00\x12\x34\n\x10\x64\x61tetime_command\x12\x17.DateTimeCommandRequest\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,\n\x0clock_command\x12\x13.LockCommandRequest\x1a\x05.void\"\x00\x12;\n\x14media_player_command\x12\x1a.MediaPlayerCommandRequest\x1a\x05.void\"\x00\x12\x30\n\x0enumber_command\x12\x15.NumberCommandRequest\x1a\x05.void\"\x00\x12\x30\n\x0eselect_command\x12\x15.SelectCommandRequest\x1a\x05.void\"\x00\x12.\n\rsiren_command\x12\x14.SirenCommandRequest\x1a\x05.void\"\x00\x12\x30\n\x0eswitch_command\x12\x15.SwitchCommandRequest\x1a\x05.void\"\x00\x12,\n\x0ctext_command\x12\x13.TextCommandRequest\x1a\x05.void\"\x00\x12,\n\x0ctime_command\x12\x13.TimeCommandRequest\x1a\x05.void\"\x00\x12\x30\n\x0eupdate_command\x12\x15.UpdateCommandRequest\x1a\x05.void\"\x00\x12.\n\rvalve_command\x12\x14.ValveCommandRequest\x1a\x05.void\"\x00\x12;\n\x14water_heater_command\x12\x1a.WaterHeaterCommandRequest\x1a\x05.void\"\x00\x12\\\n%subscribe_bluetooth_le_advertisements\x12*.SubscribeBluetoothLEAdvertisementsRequest\x1a\x05.void\"\x00\x12<\n\x18\x62luetooth_device_request\x12\x17.BluetoothDeviceRequest\x1a\x05.void\"\x00\x12H\n\x1b\x62luetooth_gatt_get_services\x12 .BluetoothGATTGetServicesRequest\x1a\x05.void\"\x00\x12\x39\n\x13\x62luetooth_gatt_read\x12\x19.BluetoothGATTReadRequest\x1a\x05.void\"\x00\x12;\n\x14\x62luetooth_gatt_write\x12\x1a.BluetoothGATTWriteRequest\x1a\x05.void\"\x00\x12N\n\x1e\x62luetooth_gatt_read_descriptor\x12#.BluetoothGATTReadDescriptorRequest\x1a\x05.void\"\x00\x12P\n\x1f\x62luetooth_gatt_write_descriptor\x12$.BluetoothGATTWriteDescriptorRequest\x1a\x05.void\"\x00\x12=\n\x15\x62luetooth_gatt_notify\x12\x1b.BluetoothGATTNotifyRequest\x1a\x05.void\"\x00\x12v\n$subscribe_bluetooth_connections_free\x12).SubscribeBluetoothConnectionsFreeRequest\x1a!.BluetoothConnectionsFreeResponse\"\x00\x12`\n\'unsubscribe_bluetooth_le_advertisements\x12,.UnsubscribeBluetoothLEAdvertisementsRequest\x1a\x05.void\"\x00\x12\x46\n\x1a\x62luetooth_scanner_set_mode\x12\x1f.BluetoothScannerSetModeRequest\x1a\x05.void\"\x00\x12\x45\n\x19subscribe_voice_assistant\x12\x1f.SubscribeVoiceAssistantRequest\x1a\x05.void\"\x00\x12p\n!voice_assistant_get_configuration\x12#.VoiceAssistantConfigurationRequest\x1a$.VoiceAssistantConfigurationResponse\"\x00\x12M\n!voice_assistant_set_configuration\x12\x1f.VoiceAssistantSetConfiguration\x1a\x05.void\"\x00\x12H\n\x1b\x61larm_control_panel_command\x12 .AlarmControlPanelCommandRequest\x1a\x05.void\"\x00\x12.\n\x11zwave_proxy_frame\x12\x10.ZWaveProxyFrame\x1a\x05.void\"\x00\x12\x32\n\x13zwave_proxy_request\x12\x12.ZWaveProxyRequest\x1a\x05.void\"\x00\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tapi.proto\x1a\x11\x61pi_options.proto\"d\n\x0cHelloRequest\x12\x13\n\x0b\x63lient_info\x18\x01 \x01(\t\x12\x19\n\x11\x61pi_version_major\x18\x02 \x01(\r\x12\x19\n\x11\x61pi_version_minor\x18\x03 \x01(\r:\t\xe0@\x01\xe8@\x02\x80\x41\x01\"s\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\x12\x0c\n\x04name\x18\x04 \x01(\t:\t\xe0@\x02\xe8@\x01\x80\x41\x01\"6\n\x15\x41uthenticationRequest\x12\x10\n\x08password\x18\x01 \x01(\t:\x0b\x18\x01\xe0@\x03\xe8@\x02\x80\x41\x01\"?\n\x16\x41uthenticationResponse\x12\x18\n\x10invalid_password\x18\x01 \x01(\x08:\x0b\x18\x01\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\")\n\x08\x41reaInfo\x12\x0f\n\x07\x61rea_id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\">\n\nDeviceInfo\x12\x11\n\tdevice_id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07\x61rea_id\x18\x03 \x01(\r\"\x9f\x08\n\x12\x44\x65viceInfoResponse\x12\x19\n\ruses_password\x18\x01 \x01(\x08\x42\x02\x18\x01\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)\n\x0ehas_deep_sleep\x18\x07 \x01(\x08\x42\x11\x92\x41\x0eUSE_DEEP_SLEEP\x12-\n\x0cproject_name\x18\x08 \x01(\tB\x17\x92\x41\x14\x45SPHOME_PROJECT_NAME\x12\x30\n\x0fproject_version\x18\t \x01(\tB\x17\x92\x41\x14\x45SPHOME_PROJECT_NAME\x12(\n\x0ewebserver_port\x18\n \x01(\rB\x10\x92\x41\rUSE_WEBSERVER\x12@\n\x1elegacy_bluetooth_proxy_version\x18\x0b \x01(\rB\x18\x18\x01\x92\x41\x13USE_BLUETOOTH_PROXY\x12=\n\x1d\x62luetooth_proxy_feature_flags\x18\x0f \x01(\rB\x16\x92\x41\x13USE_BLUETOOTH_PROXY\x12\x14\n\x0cmanufacturer\x18\x0c \x01(\t\x12\x15\n\rfriendly_name\x18\r \x01(\t\x12@\n\x1elegacy_voice_assistant_version\x18\x0e \x01(\rB\x18\x18\x01\x92\x41\x13USE_VOICE_ASSISTANT\x12=\n\x1dvoice_assistant_feature_flags\x18\x11 \x01(\rB\x16\x92\x41\x13USE_VOICE_ASSISTANT\x12$\n\x0esuggested_area\x18\x10 \x01(\tB\x0c\x92\x41\tUSE_AREAS\x12\x35\n\x15\x62luetooth_mac_address\x18\x12 \x01(\tB\x16\x92\x41\x13USE_BLUETOOTH_PROXY\x12\x32\n\x18\x61pi_encryption_supported\x18\x13 \x01(\x08\x42\x10\x92\x41\rUSE_API_NOISE\x12\x44\n\x07\x64\x65vices\x18\x14 \x03(\x0b\x32\x0b.DeviceInfoB&\x92\x41\x0bUSE_DEVICES\xd2\xb5\x18\x14\x45SPHOME_DEVICE_COUNT\x12<\n\x05\x61reas\x18\x15 \x03(\x0b\x32\t.AreaInfoB\"\x92\x41\tUSE_AREAS\xd2\xb5\x18\x12\x45SPHOME_AREA_COUNT\x12%\n\x04\x61rea\x18\x16 \x01(\x0b\x32\t.AreaInfoB\x0c\x92\x41\tUSE_AREAS\x12\x35\n\x19zwave_proxy_feature_flags\x18\x17 \x01(\rB\x12\x92\x41\x0fUSE_ZWAVE_PROXY\x12)\n\rzwave_home_id\x18\x18 \x01(\rB\x12\x92\x41\x0fUSE_ZWAVE_PROXY:\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\"\xd0\x02\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\x14\n\x0c\x64\x65vice_class\x18\x05 \x01(\t\x12\x1f\n\x17is_status_binary_sensor\x18\x06 \x01(\x08\x12\x1b\n\x13\x64isabled_by_default\x18\x07 \x01(\x08\x12 \n\x04icon\x18\x08 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12(\n\x0f\x65ntity_category\x18\t \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\n \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:5\xe0@\x0c\xe8@\x01\xf2@\x11USE_BINARY_SENSOR\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xac\x01\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:9\xe0@\x15\xe8@\x01\xf2@\x11USE_BINARY_SENSOR\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x80\x03\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\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\x1b\n\x13\x64isabled_by_default\x18\t \x01(\x08\x12 \n\x04icon\x18\n \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12(\n\x0f\x65ntity_category\x18\x0b \x01(\x0e\x32\x0f.EntityCategory\x12\x15\n\rsupports_stop\x18\x0c \x01(\x08\x12!\n\tdevice_id\x18\r \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:-\xe0@\r\xe8@\x01\xf2@\tUSE_COVER\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xf0\x01\n\x12\x43overStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12+\n\x0clegacy_state\x18\x02 \x01(\x0e\x32\x11.LegacyCoverStateB\x02\x18\x01\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\x12!\n\tdevice_id\x18\x06 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:1\xe0@\x16\xe8@\x01\xf2@\tUSE_COVER\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x99\x02\n\x13\x43overCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x1e\n\x12has_legacy_command\x18\x02 \x01(\x08\x42\x02\x18\x01\x12/\n\x0elegacy_command\x18\x03 \x01(\x0e\x32\x13.LegacyCoverCommandB\x02\x18\x01\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\x12!\n\tdevice_id\x18\t \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:+\xe0@\x1e\xe8@\x02\xf2@\tUSE_COVER\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xb6\x03\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\x1c\n\x14supports_oscillation\x18\x05 \x01(\x08\x12\x16\n\x0esupports_speed\x18\x06 \x01(\x08\x12\x1a\n\x12supports_direction\x18\x07 \x01(\x08\x12\x1d\n\x15supported_speed_count\x18\x08 \x01(\x05\x12\x1b\n\x13\x64isabled_by_default\x18\t \x01(\x08\x12 \n\x04icon\x18\n \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12(\n\x0f\x65ntity_category\x18\x0b \x01(\x0e\x32\x0f.EntityCategory\x12=\n\x16supported_preset_modes\x18\x0c \x03(\tB\x1d\xf2\xb5\x18\x19std::vector\x12!\n\tdevice_id\x18\r \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:+\xe0@\x0e\xe8@\x01\xf2@\x07USE_FAN\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x81\x02\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\x1c\n\x05speed\x18\x04 \x01(\x0e\x32\t.FanSpeedB\x02\x18\x01\x12 \n\tdirection\x18\x05 \x01(\x0e\x32\r.FanDirection\x12\x13\n\x0bspeed_level\x18\x06 \x01(\x05\x12\x13\n\x0bpreset_mode\x18\x07 \x01(\t\x12!\n\tdevice_id\x18\x08 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:/\xe0@\x17\xe8@\x01\xf2@\x07USE_FAN\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x88\x03\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\x15\n\thas_speed\x18\x04 \x01(\x08\x42\x02\x18\x01\x12\x1c\n\x05speed\x18\x05 \x01(\x0e\x32\t.FanSpeedB\x02\x18\x01\x12\x17\n\x0fhas_oscillating\x18\x06 \x01(\x08\x12\x13\n\x0boscillating\x18\x07 \x01(\x08\x12\x15\n\rhas_direction\x18\x08 \x01(\x08\x12 \n\tdirection\x18\t \x01(\x0e\x32\r.FanDirection\x12\x17\n\x0fhas_speed_level\x18\n \x01(\x08\x12\x13\n\x0bspeed_level\x18\x0b \x01(\x05\x12\x17\n\x0fhas_preset_mode\x18\x0c \x01(\x08\x12\x13\n\x0bpreset_mode\x18\r \x01(\t\x12!\n\tdevice_id\x18\x0e \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:)\xe0@\x1f\xe8@\x02\xf2@\x07USE_FAN\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xc8\x04\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\x43\n\x15supported_color_modes\x18\x0c \x03(\x0e\x32\n.ColorModeB\x18\xf2\xb5\x18\x14light::ColorModeMask\x12&\n\x1alegacy_supports_brightness\x18\x05 \x01(\x08\x42\x02\x18\x01\x12\x1f\n\x13legacy_supports_rgb\x18\x06 \x01(\x08\x42\x02\x18\x01\x12\'\n\x1blegacy_supports_white_value\x18\x07 \x01(\x08\x42\x02\x18\x01\x12-\n!legacy_supports_color_temperature\x18\x08 \x01(\x08\x42\x02\x18\x01\x12\x12\n\nmin_mireds\x18\t \x01(\x02\x12\x12\n\nmax_mireds\x18\n \x01(\x02\x12.\n\x07\x65\x66\x66\x65\x63ts\x18\x0b \x03(\tB\x1d\xf2\xb5\x18\x19\x46ixedVector\x12\x1b\n\x13\x64isabled_by_default\x18\r \x01(\x08\x12 \n\x04icon\x18\x0e \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12(\n\x0f\x65ntity_category\x18\x0f \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x10 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:-\xe0@\x0f\xe8@\x01\xf2@\tUSE_LIGHT\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xe0\x02\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\x1e\n\ncolor_mode\x18\x0b \x01(\x0e\x32\n.ColorMode\x12\x18\n\x10\x63olor_brightness\x18\n \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\x12\n\ncold_white\x18\x0c \x01(\x02\x12\x12\n\nwarm_white\x18\r \x01(\x02\x12\x0e\n\x06\x65\x66\x66\x65\x63t\x18\t \x01(\t\x12!\n\tdevice_id\x18\x0e \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:1\xe0@\x18\xe8@\x01\xf2@\tUSE_LIGHT\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xad\x05\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\x16\n\x0ehas_color_mode\x18\x16 \x01(\x08\x12\x1e\n\ncolor_mode\x18\x17 \x01(\x0e\x32\n.ColorMode\x12\x1c\n\x14has_color_brightness\x18\x14 \x01(\x08\x12\x18\n\x10\x63olor_brightness\x18\x15 \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\x16\n\x0ehas_cold_white\x18\x18 \x01(\x08\x12\x12\n\ncold_white\x18\x19 \x01(\x02\x12\x16\n\x0ehas_warm_white\x18\x1a \x01(\x08\x12\x12\n\nwarm_white\x18\x1b \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\x12!\n\tdevice_id\x18\x1c \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:+\xe0@ \xe8@\x02\xf2@\tUSE_LIGHT\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xd2\x03\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\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\x12\x14\n\x0c\x64\x65vice_class\x18\t \x01(\t\x12&\n\x0bstate_class\x18\n \x01(\x0e\x32\x11.SensorStateClass\x12\x38\n\x16legacy_last_reset_type\x18\x0b \x01(\x0e\x32\x14.SensorLastResetTypeB\x02\x18\x01\x12\x1b\n\x13\x64isabled_by_default\x18\x0c \x01(\x08\x12(\n\x0f\x65ntity_category\x18\r \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x0e \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@\x10\xe8@\x01\xf2@\nUSE_SENSOR\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x9f\x01\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:2\xe0@\x19\xe8@\x01\xf2@\nUSE_SENSOR\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xb9\x02\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x15\n\rassumed_state\x18\x06 \x01(\x08\x12\x1b\n\x13\x64isabled_by_default\x18\x07 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x08 \x01(\x0e\x32\x0f.EntityCategory\x12\x14\n\x0c\x64\x65vice_class\x18\t \x01(\t\x12!\n\tdevice_id\x18\n \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@\x11\xe8@\x01\xf2@\nUSE_SWITCH\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x88\x01\n\x13SwitchStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:2\xe0@\x1a\xe8@\x01\xf2@\nUSE_SWITCH\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x83\x01\n\x14SwitchCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@!\xe8@\x02\xf2@\nUSE_SWITCH\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xab\x02\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x14\n\x0c\x64\x65vice_class\x18\x08 \x01(\t\x12!\n\tdevice_id\x18\t \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:3\xe0@\x12\xe8@\x01\xf2@\x0fUSE_TEXT_SENSOR\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xa8\x01\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:7\xe0@\x1b\xe8@\x01\xf2@\x0fUSE_TEXT_SENSOR\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"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\"P\n\x15SubscribeLogsResponse\x12\x18\n\x05level\x18\x01 \x01(\x0e\x32\t.LogLevel\x12\x0f\n\x07message\x18\x03 \x01(\x0c:\x0c\xe0@\x1d\xe8@\x01\xf8@\x00\x80\x41\x00\"C\n\x1cNoiseEncryptionSetKeyRequest\x12\x0b\n\x03key\x18\x01 \x01(\x0c:\x16\xe0@|\xe8@\x02\xf2@\rUSE_API_NOISE\"H\n\x1dNoiseEncryptionSetKeyResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08:\x16\xe0@}\xe8@\x01\xf2@\rUSE_API_NOISE\"P\n%SubscribeHomeassistantServicesRequest:\'\xe0@\"\xe8@\x02\xf2@\x1eUSE_API_HOMEASSISTANT_SERVICES\"5\n\x17HomeassistantServiceMap\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xd2\x03\n\x1aHomeassistantActionRequest\x12\x0f\n\x07service\x18\x01 \x01(\t\x12,\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32\x18.HomeassistantServiceMapB\x04\xe8\xb5\x18\x01\x12\x35\n\rdata_template\x18\x03 \x03(\x0b\x32\x18.HomeassistantServiceMapB\x04\xe8\xb5\x18\x01\x12\x31\n\tvariables\x18\x04 \x03(\x0b\x32\x18.HomeassistantServiceMapB\x04\xe8\xb5\x18\x01\x12\x10\n\x08is_event\x18\x05 \x01(\x08\x12:\n\x07\x63\x61ll_id\x18\x06 \x01(\rB)\x92\x41&USE_API_HOMEASSISTANT_ACTION_RESPONSES\x12\x46\n\x0ewants_response\x18\x07 \x01(\x08\x42.\x92\x41+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON\x12I\n\x11response_template\x18\x08 \x01(\tB.\x92\x41+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON:*\xe0@#\xe8@\x01\xf2@\x1eUSE_API_HOMEASSISTANT_SERVICES\x80\x41\x01\"\xd2\x01\n\x1bHomeassistantActionResponse\x12\x0f\n\x07\x63\x61ll_id\x18\x01 \x01(\r\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\x15\n\rerror_message\x18\x03 \x01(\t\x12\x45\n\rresponse_data\x18\x04 \x01(\x0c\x42.\x92\x41+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON:3\xe0@\x82\x01\xe8@\x02\xf2@&USE_API_HOMEASSISTANT_ACTION_RESPONSES\x80\x41\x01\"L\n#SubscribeHomeAssistantStatesRequest:%\xe0@&\xe8@\x02\xf2@\x1cUSE_API_HOMEASSISTANT_STATES\"\x80\x01\n#SubscribeHomeAssistantStateResponse\x12\x11\n\tentity_id\x18\x01 \x01(\t\x12\x11\n\tattribute\x18\x02 \x01(\t\x12\x0c\n\x04once\x18\x03 \x01(\x08:%\xe0@\'\xe8@\x01\xf2@\x1cUSE_API_HOMEASSISTANT_STATES\"{\n\x1aHomeAssistantStateResponse\x12\x11\n\tentity_id\x18\x01 \x01(\t\x12\r\n\x05state\x18\x02 \x01(\t\x12\x11\n\tattribute\x18\x03 \x01(\t:(\xe0@(\xe8@\x02\xf2@\x1cUSE_API_HOMEASSISTANT_STATES\x80\x41\x01\"\x18\n\x0eGetTimeRequest:\x06\xe0@$\xe8@\x01\"E\n\x0fGetTimeResponse\x12\x15\n\repoch_seconds\x18\x01 \x01(\x07\x12\x10\n\x08timezone\x18\x02 \x01(\t:\t\xe0@%\xe8@\x02\x80\x41\x01\"l\n\x1cListEntitiesServicesArgument\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\x04type\x18\x02 \x01(\x0e\x32\x0f.ServiceArgType:\x1f\xf2@\x1cUSE_API_USER_DEFINED_ACTIONS\"\xc5\x01\n\x1cListEntitiesServicesResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x31\n\x04\x61rgs\x18\x03 \x03(\x0b\x32\x1d.ListEntitiesServicesArgumentB\x04\xe8\xb5\x18\x01\x12\x30\n\x11supports_response\x18\x04 \x01(\x0e\x32\x15.SupportsResponseType:%\xe0@)\xe8@\x01\xf2@\x1cUSE_API_USER_DEFINED_ACTIONS\"\xfb\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\x1a\n\nbool_array\x18\x06 \x03(\x08\x42\x06\x10\x00\xe8\xb5\x18\x01\x12\x19\n\tint_array\x18\x07 \x03(\x11\x42\x06\x10\x00\xe8\xb5\x18\x01\x12\x1b\n\x0b\x66loat_array\x18\x08 \x03(\x02\x42\x06\x10\x00\xe8\xb5\x18\x01\x12\x1a\n\x0cstring_array\x18\t \x03(\tB\x04\xe8\xb5\x18\x01:\x1f\xf2@\x1cUSE_API_USER_DEFINED_ACTIONS\"\xf9\x01\n\x15\x45xecuteServiceRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12+\n\x04\x61rgs\x18\x02 \x03(\x0b\x32\x17.ExecuteServiceArgumentB\x04\xe8\xb5\x18\x01\x12\x39\n\x07\x63\x61ll_id\x18\x03 \x01(\rB(\x92\x41%USE_API_USER_DEFINED_ACTION_RESPONSES\x12\x41\n\x0freturn_response\x18\x04 \x01(\x08\x42(\x92\x41%USE_API_USER_DEFINED_ACTION_RESPONSES:(\xe0@*\xe8@\x02\xf2@\x1cUSE_API_USER_DEFINED_ACTIONS\x80\x41\x01\"\xcf\x01\n\x16\x45xecuteServiceResponse\x12\x0f\n\x07\x63\x61ll_id\x18\x01 \x01(\r\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\x15\n\rerror_message\x18\x03 \x01(\t\x12H\n\rresponse_data\x18\x04 \x01(\x0c\x42\x31\x92\x41*USE_API_USER_DEFINED_ACTION_RESPONSES_JSON\xe0\xb5\x18\x01:2\xe0@\x83\x01\xe8@\x01\xf2@%USE_API_USER_DEFINED_ACTION_RESPONSES\x80\x41\x01\"\x8c\x02\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\x1b\n\x13\x64isabled_by_default\x18\x05 \x01(\x08\x12 \n\x04icon\x18\x06 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x08 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@+\xe8@\x01\xf2@\nUSE_CAMERA\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x92\x01\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:/\xe0@,\xe8@\x01\xf2@\nUSE_CAMERA\x8a\x41\x19StateResponseProtoMessage\"L\n\x12\x43\x61meraImageRequest\x12\x0e\n\x06single\x18\x01 \x01(\x08\x12\x0e\n\x06stream\x18\x02 \x01(\x08:\x16\xe0@-\xe8@\x02\xf2@\nUSE_CAMERA\x80\x41\x01\"\xfd\x08\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$\n\x1csupports_current_temperature\x18\x05 \x01(\x08\x12-\n%supports_two_point_target_temperature\x18\x06 \x01(\x08\x12\x43\n\x0fsupported_modes\x18\x07 \x03(\x0e\x32\x0c.ClimateModeB\x1c\xf2\xb5\x18\x18\x63limate::ClimateModeMask\x12\x1e\n\x16visual_min_temperature\x18\x08 \x01(\x02\x12\x1e\n\x16visual_max_temperature\x18\t \x01(\x02\x12&\n\x1evisual_target_temperature_step\x18\n \x01(\x02\x12 \n\x14legacy_supports_away\x18\x0b \x01(\x08\x42\x02\x18\x01\x12\x17\n\x0fsupports_action\x18\x0c \x01(\x08\x12M\n\x13supported_fan_modes\x18\r \x03(\x0e\x32\x0f.ClimateFanModeB\x1f\xf2\xb5\x18\x1b\x63limate::ClimateFanModeMask\x12S\n\x15supported_swing_modes\x18\x0e \x03(\x0e\x32\x11.ClimateSwingModeB!\xf2\xb5\x18\x1d\x63limate::ClimateSwingModeMask\x12\x41\n\x1asupported_custom_fan_modes\x18\x0f \x03(\tB\x1d\xf2\xb5\x18\x19std::vector\x12I\n\x11supported_presets\x18\x10 \x03(\x0e\x32\x0e.ClimatePresetB\x1e\xf2\xb5\x18\x1a\x63limate::ClimatePresetMask\x12?\n\x18supported_custom_presets\x18\x11 \x03(\tB\x1d\xf2\xb5\x18\x19std::vector\x12\x1b\n\x13\x64isabled_by_default\x18\x12 \x01(\x08\x12 \n\x04icon\x18\x13 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12(\n\x0f\x65ntity_category\x18\x14 \x01(\x0e\x32\x0f.EntityCategory\x12\'\n\x1fvisual_current_temperature_step\x18\x15 \x01(\x02\x12!\n\x19supports_current_humidity\x18\x16 \x01(\x08\x12 \n\x18supports_target_humidity\x18\x17 \x01(\x08\x12\x1b\n\x13visual_min_humidity\x18\x18 \x01(\x02\x12\x1b\n\x13visual_max_humidity\x18\x19 \x01(\x02\x12!\n\tdevice_id\x18\x1a \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\x15\n\rfeature_flags\x18\x1b \x01(\r:/\xe0@.\xe8@\x01\xf2@\x0bUSE_CLIMATE\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x9e\x04\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\x1e\n\x12unused_legacy_away\x18\x07 \x01(\x08\x42\x02\x18\x01\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\x12\x17\n\x0f\x63ustom_fan_mode\x18\x0b \x01(\t\x12\x1e\n\x06preset\x18\x0c \x01(\x0e\x32\x0e.ClimatePreset\x12\x15\n\rcustom_preset\x18\r \x01(\t\x12\x18\n\x10\x63urrent_humidity\x18\x0e \x01(\x02\x12\x17\n\x0ftarget_humidity\x18\x0f \x01(\x02\x12!\n\tdevice_id\x18\x10 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:3\xe0@/\xe8@\x01\xf2@\x0bUSE_CLIMATE\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xf8\x05\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\"\n\x16unused_has_legacy_away\x18\n \x01(\x08\x42\x02\x18\x01\x12\x1e\n\x12unused_legacy_away\x18\x0b \x01(\x08\x42\x02\x18\x01\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\x12\x1b\n\x13has_custom_fan_mode\x18\x10 \x01(\x08\x12\x17\n\x0f\x63ustom_fan_mode\x18\x11 \x01(\t\x12\x12\n\nhas_preset\x18\x12 \x01(\x08\x12\x1e\n\x06preset\x18\x13 \x01(\x0e\x32\x0e.ClimatePreset\x12\x19\n\x11has_custom_preset\x18\x14 \x01(\x08\x12\x15\n\rcustom_preset\x18\x15 \x01(\t\x12\x1b\n\x13has_target_humidity\x18\x16 \x01(\x08\x12\x17\n\x0ftarget_humidity\x18\x17 \x01(\x02\x12!\n\tdevice_id\x18\x18 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:-\xe0@0\xe8@\x02\xf2@\x0bUSE_CLIMATE\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xd3\x03\n\x1fListEntitiesWaterHeaterResponse\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 \n\x04icon\x18\x04 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x05 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x06 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x07 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\x17\n\x0fmin_temperature\x18\x08 \x01(\x02\x12\x17\n\x0fmax_temperature\x18\t \x01(\x02\x12\x1f\n\x17target_temperature_step\x18\n \x01(\x02\x12P\n\x0fsupported_modes\x18\x0b \x03(\x0e\x32\x10.WaterHeaterModeB%\xf2\xb5\x18!water_heater::WaterHeaterModeMask\x12\x1a\n\x12supported_features\x18\x0c \x01(\r:5\xe0@\x84\x01\xe8@\x01\xf2@\x10USE_WATER_HEATER\x8a\x41\x18InfoResponseProtoMessage\"\xae\x02\n\x18WaterHeaterStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x1b\n\x13\x63urrent_temperature\x18\x02 \x01(\x02\x12\x1a\n\x12target_temperature\x18\x03 \x01(\x02\x12\x1e\n\x04mode\x18\x04 \x01(\x0e\x32\x10.WaterHeaterMode\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\r\n\x05state\x18\x06 \x01(\r\x12\x1e\n\x16target_temperature_low\x18\x07 \x01(\x02\x12\x1f\n\x17target_temperature_high\x18\x08 \x01(\x02:9\xe0@\x85\x01\xe8@\x01\xf2@\x10USE_WATER_HEATER\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xa0\x02\n\x19WaterHeaterCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x12\n\nhas_fields\x18\x02 \x01(\r\x12\x1e\n\x04mode\x18\x03 \x01(\x0e\x32\x10.WaterHeaterMode\x12\x1a\n\x12target_temperature\x18\x04 \x01(\x02\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\r\n\x05state\x18\x06 \x01(\r\x12\x1e\n\x16target_temperature_low\x18\x07 \x01(\x02\x12\x1f\n\x17target_temperature_high\x18\x08 \x01(\x02:3\xe0@\x86\x01\xe8@\x02\xf2@\x10USE_WATER_HEATER\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\x8e\x03\n\x1aListEntitiesNumberResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x11\n\tmin_value\x18\x06 \x01(\x02\x12\x11\n\tmax_value\x18\x07 \x01(\x02\x12\x0c\n\x04step\x18\x08 \x01(\x02\x12\x1b\n\x13\x64isabled_by_default\x18\t \x01(\x08\x12(\n\x0f\x65ntity_category\x18\n \x01(\x0e\x32\x0f.EntityCategory\x12\x1b\n\x13unit_of_measurement\x18\x0b \x01(\t\x12\x19\n\x04mode\x18\x0c \x01(\x0e\x32\x0b.NumberMode\x12\x14\n\x0c\x64\x65vice_class\x18\r \x01(\t\x12!\n\tdevice_id\x18\x0e \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@1\xe8@\x01\xf2@\nUSE_NUMBER\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x9f\x01\n\x13NumberStateResponse\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:2\xe0@2\xe8@\x01\xf2@\nUSE_NUMBER\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x83\x01\n\x14NumberCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x02\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@3\xe8@\x02\xf2@\nUSE_NUMBER\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xbc\x02\n\x1aListEntitiesSelectResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12.\n\x07options\x18\x06 \x03(\tB\x1d\xf2\xb5\x18\x19\x46ixedVector\x12\x1b\n\x13\x64isabled_by_default\x18\x07 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x08 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\t \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@4\xe8@\x01\xf2@\nUSE_SELECT\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x9f\x01\n\x13SelectStateResponse\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:2\xe0@5\xe8@\x01\xf2@\nUSE_SELECT\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x83\x01\n\x14SelectCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\t\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@6\xe8@\x02\xf2@\nUSE_SELECT\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xec\x02\n\x19ListEntitiesSirenResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12,\n\x05tones\x18\x07 \x03(\tB\x1d\xf2\xb5\x18\x19\x46ixedVector\x12\x19\n\x11supports_duration\x18\x08 \x01(\x08\x12\x17\n\x0fsupports_volume\x18\t \x01(\x08\x12(\n\x0f\x65ntity_category\x18\n \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x0b \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:-\xe0@7\xe8@\x01\xf2@\tUSE_SIREN\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x86\x01\n\x12SirenStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\x08\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:1\xe0@8\xe8@\x01\xf2@\tUSE_SIREN\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x80\x02\n\x13SirenCommandRequest\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\x10\n\x08has_tone\x18\x04 \x01(\x08\x12\x0c\n\x04tone\x18\x05 \x01(\t\x12\x14\n\x0chas_duration\x18\x06 \x01(\x08\x12\x10\n\x08\x64uration\x18\x07 \x01(\r\x12\x12\n\nhas_volume\x18\x08 \x01(\x08\x12\x0e\n\x06volume\x18\t \x01(\x02\x12!\n\tdevice_id\x18\n \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:+\xe0@9\xe8@\x02\xf2@\tUSE_SIREN\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xe2\x02\n\x18ListEntitiesLockResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x15\n\rassumed_state\x18\x08 \x01(\x08\x12\x15\n\rsupports_open\x18\t \x01(\x08\x12\x15\n\rrequires_code\x18\n \x01(\x08\x12\x13\n\x0b\x63ode_format\x18\x0b \x01(\t\x12!\n\tdevice_id\x18\x0c \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@:\xe8@\x01\xf2@\x08USE_LOCK\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x90\x01\n\x11LockStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x19\n\x05state\x18\x02 \x01(\x0e\x32\n.LockState\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:0\xe0@;\xe8@\x01\xf2@\x08USE_LOCK\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xaf\x01\n\x12LockCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x1d\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\x0c.LockCommand\x12\x10\n\x08has_code\x18\x03 \x01(\x08\x12\x0c\n\x04\x63ode\x18\x04 \x01(\t\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:*\xe0@<\xe8@\x02\xf2@\x08USE_LOCK\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xa2\x02\n\x1aListEntitiesButtonResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x14\n\x0c\x64\x65vice_class\x18\x08 \x01(\t\x12!\n\tdevice_id\x18\t \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@=\xe8@\x01\xf2@\nUSE_BUTTON\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"t\n\x14\x42uttonCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12!\n\tdevice_id\x18\x02 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@>\xe8@\x02\xf2@\nUSE_BUTTON\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xae\x01\n\x1aMediaPlayerSupportedFormat\x12\x0e\n\x06\x66ormat\x18\x01 \x01(\t\x12\x13\n\x0bsample_rate\x18\x02 \x01(\r\x12\x14\n\x0cnum_channels\x18\x03 \x01(\r\x12*\n\x07purpose\x18\x04 \x01(\x0e\x32\x19.MediaPlayerFormatPurpose\x12\x14\n\x0csample_bytes\x18\x05 \x01(\r:\x13\xf2@\x10USE_MEDIA_PLAYER\"\xfe\x02\n\x1fListEntitiesMediaPlayerResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x16\n\x0esupports_pause\x18\x08 \x01(\x08\x12\x36\n\x11supported_formats\x18\t \x03(\x0b\x32\x1b.MediaPlayerSupportedFormat\x12!\n\tdevice_id\x18\n \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\x15\n\rfeature_flags\x18\x0b \x01(\r:4\xe0@?\xe8@\x01\xf2@\x10USE_MEDIA_PLAYER\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xc5\x01\n\x18MediaPlayerStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12 \n\x05state\x18\x02 \x01(\x0e\x32\x11.MediaPlayerState\x12\x0e\n\x06volume\x18\x03 \x01(\x02\x12\r\n\x05muted\x18\x04 \x01(\x08\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:8\xe0@@\xe8@\x01\xf2@\x10USE_MEDIA_PLAYER\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xb8\x02\n\x19MediaPlayerCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x13\n\x0bhas_command\x18\x02 \x01(\x08\x12$\n\x07\x63ommand\x18\x03 \x01(\x0e\x32\x13.MediaPlayerCommand\x12\x12\n\nhas_volume\x18\x04 \x01(\x08\x12\x0e\n\x06volume\x18\x05 \x01(\x02\x12\x15\n\rhas_media_url\x18\x06 \x01(\x08\x12\x11\n\tmedia_url\x18\x07 \x01(\t\x12\x18\n\x10has_announcement\x18\x08 \x01(\x08\x12\x14\n\x0c\x61nnouncement\x18\t \x01(\x08\x12!\n\tdevice_id\x18\n \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:2\xe0@A\xe8@\x02\xf2@\x10USE_MEDIA_PLAYER\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"X\n)SubscribeBluetoothLEAdvertisementsRequest\x12\r\n\x05\x66lags\x18\x01 \x01(\r:\x1c\xe0@B\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"O\n\x14\x42luetoothServiceData\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x17\n\x0blegacy_data\x18\x02 \x03(\rB\x02\x18\x01\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c:\x02\x18\x01\"\xfe\x01\n BluetoothLEAdvertisementResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0c\n\x04name\x18\x02 \x01(\x0c\x12\x0c\n\x04rssi\x18\x03 \x01(\x11\x12\x15\n\rservice_uuids\x18\x04 \x03(\t\x12+\n\x0cservice_data\x18\x05 \x03(\x0b\x32\x15.BluetoothServiceData\x12\x30\n\x11manufacturer_data\x18\x06 \x03(\x0b\x32\x15.BluetoothServiceData\x12\x14\n\x0c\x61\x64\x64ress_type\x18\x07 \x01(\r:!\x18\x01\xe0@C\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\x80\x41\x01\"f\n\x1b\x42luetoothLERawAdvertisement\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0c\n\x04rssi\x18\x02 \x01(\x11\x12\x14\n\x0c\x61\x64\x64ress_type\x18\x03 \x01(\r\x12\x12\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x42\x04\xb8\xb5\x18>\"\xab\x01\n$BluetoothLERawAdvertisementsResponse\x12\x62\n\x0e\x61\x64vertisements\x18\x01 \x03(\x0b\x32\x1c.BluetoothLERawAdvertisementB,\xda\xb5\x18(BLUETOOTH_PROXY_ADVERTISEMENT_BATCH_SIZE:\x1f\xe0@]\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\x80\x41\x01\"\xaa\x01\n\x16\x42luetoothDeviceRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x31\n\x0crequest_type\x18\x02 \x01(\x0e\x32\x1b.BluetoothDeviceRequestType\x12\x18\n\x10has_address_type\x18\x03 \x01(\x08\x12\x14\n\x0c\x61\x64\x64ress_type\x18\x04 \x01(\r:\x1c\xe0@D\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"\x81\x01\n!BluetoothDeviceConnectionResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x11\n\tconnected\x18\x02 \x01(\x08\x12\x0b\n\x03mtu\x18\x03 \x01(\r\x12\r\n\x05\x65rror\x18\x04 \x01(\x05:\x1c\xe0@E\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"P\n\x1f\x42luetoothGATTGetServicesRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04:\x1c\xe0@F\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"U\n\x17\x42luetoothGATTDescriptor\x12\x16\n\x04uuid\x18\x01 \x03(\x04\x42\x08\xb8\xb5\x18\x02\xc8\xb5\x18\x01\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x12\n\nshort_uuid\x18\x03 \x01(\r\"\xa2\x01\n\x1b\x42luetoothGATTCharacteristic\x12\x16\n\x04uuid\x18\x01 \x03(\x04\x42\x08\xb8\xb5\x18\x02\xc8\xb5\x18\x01\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x12\n\nproperties\x18\x03 \x01(\r\x12\x33\n\x0b\x64\x65scriptors\x18\x04 \x03(\x0b\x32\x18.BluetoothGATTDescriptorB\x04\xe8\xb5\x18\x01\x12\x12\n\nshort_uuid\x18\x05 \x01(\r\"\x8f\x01\n\x14\x42luetoothGATTService\x12\x16\n\x04uuid\x18\x01 \x03(\x04\x42\x08\xb8\xb5\x18\x02\xc8\xb5\x18\x01\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12;\n\x0f\x63haracteristics\x18\x03 \x03(\x0b\x32\x1c.BluetoothGATTCharacteristicB\x04\xe8\xb5\x18\x01\x12\x12\n\nshort_uuid\x18\x04 \x01(\r\"z\n BluetoothGATTGetServicesResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\'\n\x08services\x18\x02 \x03(\x0b\x32\x15.BluetoothGATTService:\x1c\xe0@G\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"U\n$BluetoothGATTGetServicesDoneResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04:\x1c\xe0@H\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"Y\n\x18\x42luetoothGATTReadRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r:\x1c\xe0@I\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"h\n\x19\x42luetoothGATTReadResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c:\x1c\xe0@J\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"z\n\x19\x42luetoothGATTWriteRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x10\n\x08response\x18\x03 \x01(\x08\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c:\x1c\xe0@K\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"c\n\"BluetoothGATTReadDescriptorRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r:\x1c\xe0@L\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"r\n#BluetoothGATTWriteDescriptorRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c:\x1c\xe0@M\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"k\n\x1a\x42luetoothGATTNotifyRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x0e\n\x06\x65nable\x18\x03 \x01(\x08:\x1c\xe0@N\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"n\n\x1f\x42luetoothGATTNotifyDataResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c:\x1c\xe0@O\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"H\n(SubscribeBluetoothConnectionsFreeRequest:\x1c\xe0@P\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"\x99\x01\n BluetoothConnectionsFreeResponse\x12\x0c\n\x04\x66ree\x18\x01 \x01(\r\x12\r\n\x05limit\x18\x02 \x01(\r\x12:\n\tallocated\x18\x03 \x03(\x04\x42\'\xc8\xb5\x18\x01\xd2\xb5\x18\x1f\x42LUETOOTH_PROXY_MAX_CONNECTIONS:\x1c\xe0@Q\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"j\n\x1a\x42luetoothGATTErrorResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r\x12\r\n\x05\x65rror\x18\x03 \x01(\x05:\x1c\xe0@R\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"[\n\x1a\x42luetoothGATTWriteResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r:\x1c\xe0@S\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"\\\n\x1b\x42luetoothGATTNotifyResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06handle\x18\x02 \x01(\r:\x1c\xe0@T\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"n\n\x1e\x42luetoothDevicePairingResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0e\n\x06paired\x18\x02 \x01(\x08\x12\r\n\x05\x65rror\x18\x03 \x01(\x05:\x1c\xe0@U\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"q\n BluetoothDeviceUnpairingResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\r\n\x05\x65rror\x18\x03 \x01(\x05:\x1c\xe0@V\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"K\n+UnsubscribeBluetoothLEAdvertisementsRequest:\x1c\xe0@W\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"r\n!BluetoothDeviceClearCacheResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\x04\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\r\n\x05\x65rror\x18\x03 \x01(\x05:\x1c\xe0@X\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"\xb9\x01\n\x1d\x42luetoothScannerStateResponse\x12%\n\x05state\x18\x01 \x01(\x0e\x32\x16.BluetoothScannerState\x12#\n\x04mode\x18\x02 \x01(\x0e\x32\x15.BluetoothScannerMode\x12.\n\x0f\x63onfigured_mode\x18\x03 \x01(\x0e\x32\x15.BluetoothScannerMode:\x1c\xe0@~\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"c\n\x1e\x42luetoothScannerSetModeRequest\x12#\n\x04mode\x18\x01 \x01(\x0e\x32\x15.BluetoothScannerMode:\x1c\xe0@\x7f\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"`\n\x1eSubscribeVoiceAssistantRequest\x12\x11\n\tsubscribe\x18\x01 \x01(\x08\x12\r\n\x05\x66lags\x18\x02 \x01(\r:\x1c\xe0@Y\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"l\n\x1bVoiceAssistantAudioSettings\x12\x1f\n\x17noise_suppression_level\x18\x01 \x01(\r\x12\x11\n\tauto_gain\x18\x02 \x01(\r\x12\x19\n\x11volume_multiplier\x18\x03 \x01(\x02\"\xbc\x01\n\x15VoiceAssistantRequest\x12\r\n\x05start\x18\x01 \x01(\x08\x12\x17\n\x0f\x63onversation_id\x18\x02 \x01(\t\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x34\n\x0e\x61udio_settings\x18\x04 \x01(\x0b\x32\x1c.VoiceAssistantAudioSettings\x12\x18\n\x10wake_word_phrase\x18\x05 \x01(\t:\x1c\xe0@Z\xe8@\x01\xf2@\x13USE_VOICE_ASSISTANT\"S\n\x16VoiceAssistantResponse\x12\x0c\n\x04port\x18\x01 \x01(\r\x12\r\n\x05\x65rror\x18\x02 \x01(\x08:\x1c\xe0@[\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"6\n\x17VoiceAssistantEventData\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x8d\x01\n\x1bVoiceAssistantEventResponse\x12(\n\nevent_type\x18\x01 \x01(\x0e\x32\x14.VoiceAssistantEvent\x12&\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32\x18.VoiceAssistantEventData:\x1c\xe0@\\\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"T\n\x13VoiceAssistantAudio\x12\x12\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x42\x04\xe0\xb5\x18\x01\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x08:\x1c\xe0@j\xe8@\x00\xf2@\x13USE_VOICE_ASSISTANT\"\xcf\x01\n VoiceAssistantTimerEventResponse\x12-\n\nevent_type\x18\x01 \x01(\x0e\x32\x19.VoiceAssistantTimerEvent\x12\x10\n\x08timer_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x15\n\rtotal_seconds\x18\x04 \x01(\r\x12\x14\n\x0cseconds_left\x18\x05 \x01(\r\x12\x11\n\tis_active\x18\x06 \x01(\x08:\x1c\xe0@s\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"\x97\x01\n\x1dVoiceAssistantAnnounceRequest\x12\x10\n\x08media_id\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\x1c\n\x14preannounce_media_id\x18\x03 \x01(\t\x12\x1a\n\x12start_conversation\x18\x04 \x01(\x08:\x1c\xe0@w\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"O\n\x1eVoiceAssistantAnnounceFinished\x12\x0f\n\x07success\x18\x01 \x01(\x08:\x1c\xe0@x\xe8@\x01\xf2@\x13USE_VOICE_ASSISTANT\"R\n\x16VoiceAssistantWakeWord\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\twake_word\x18\x02 \x01(\t\x12\x19\n\x11trained_languages\x18\x03 \x03(\t\"\xa3\x01\n\x1eVoiceAssistantExternalWakeWord\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\twake_word\x18\x02 \x01(\t\x12\x19\n\x11trained_languages\x18\x03 \x03(\t\x12\x12\n\nmodel_type\x18\x04 \x01(\t\x12\x12\n\nmodel_size\x18\x05 \x01(\r\x12\x12\n\nmodel_hash\x18\x06 \x01(\t\x12\x0b\n\x03url\x18\x07 \x01(\t\"\x80\x01\n\"VoiceAssistantConfigurationRequest\x12<\n\x13\x65xternal_wake_words\x18\x01 \x03(\x0b\x32\x1f.VoiceAssistantExternalWakeWord:\x1c\xe0@y\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"\xc5\x01\n#VoiceAssistantConfigurationResponse\x12\x35\n\x14\x61vailable_wake_words\x18\x01 \x03(\x0b\x32\x17.VoiceAssistantWakeWord\x12*\n\x11\x61\x63tive_wake_words\x18\x02 \x03(\tB\x0f\x8a\xb5\x18\x0bstd::vector\x12\x1d\n\x15max_active_wake_words\x18\x03 \x01(\r:\x1c\xe0@z\xe8@\x01\xf2@\x13USE_VOICE_ASSISTANT\"Y\n\x1eVoiceAssistantSetConfiguration\x12\x19\n\x11\x61\x63tive_wake_words\x18\x01 \x03(\t:\x1c\xe0@{\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"\xf5\x02\n%ListEntitiesAlarmControlPanelResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x1a\n\x12supported_features\x18\x08 \x01(\r\x12\x15\n\rrequires_code\x18\t \x01(\x08\x12\x1c\n\x14requires_code_to_arm\x18\n \x01(\x08\x12!\n\tdevice_id\x18\x0b \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:;\xe0@^\xe8@\x01\xf2@\x17USE_ALARM_CONTROL_PANEL\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xb9\x01\n\x1e\x41larmControlPanelStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12&\n\x05state\x18\x02 \x01(\x0e\x32\x17.AlarmControlPanelState\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:?\xe0@_\xe8@\x01\xf2@\x17USE_ALARM_CONTROL_PANEL\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xcb\x01\n\x1f\x41larmControlPanelCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12/\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\x1e.AlarmControlPanelStateCommand\x12\x0c\n\x04\x63ode\x18\x03 \x01(\t\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:9\xe0@`\xe8@\x02\xf2@\x17USE_ALARM_CONTROL_PANEL\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xda\x02\n\x18ListEntitiesTextResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x12\n\nmin_length\x18\x08 \x01(\r\x12\x12\n\nmax_length\x18\t \x01(\r\x12\x0f\n\x07pattern\x18\n \x01(\t\x12\x17\n\x04mode\x18\x0b \x01(\x0e\x32\t.TextMode\x12!\n\tdevice_id\x18\x0c \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@a\xe8@\x01\xf2@\x08USE_TEXT\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x9b\x01\n\x11TextStateResponse\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\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:0\xe0@b\xe8@\x01\xf2@\x08USE_TEXT\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x7f\n\x12TextCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\r\n\x05state\x18\x02 \x01(\t\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:*\xe0@c\xe8@\x02\xf2@\x08USE_TEXT\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\x91\x02\n\x18ListEntitiesDateResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x08 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:5\xe0@d\xe8@\x01\xf2@\x11USE_DATETIME_DATE\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xbf\x01\n\x11\x44\x61teStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x15\n\rmissing_state\x18\x02 \x01(\x08\x12\x0c\n\x04year\x18\x03 \x01(\r\x12\r\n\x05month\x18\x04 \x01(\r\x12\x0b\n\x03\x64\x61y\x18\x05 \x01(\r\x12!\n\tdevice_id\x18\x06 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:9\xe0@e\xe8@\x01\xf2@\x11USE_DATETIME_DATE\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xa3\x01\n\x12\x44\x61teCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x0c\n\x04year\x18\x02 \x01(\r\x12\r\n\x05month\x18\x03 \x01(\r\x12\x0b\n\x03\x64\x61y\x18\x04 \x01(\r\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:3\xe0@f\xe8@\x02\xf2@\x11USE_DATETIME_DATE\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\x91\x02\n\x18ListEntitiesTimeResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x08 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:5\xe0@g\xe8@\x01\xf2@\x11USE_DATETIME_TIME\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xc3\x01\n\x11TimeStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x15\n\rmissing_state\x18\x02 \x01(\x08\x12\x0c\n\x04hour\x18\x03 \x01(\r\x12\x0e\n\x06minute\x18\x04 \x01(\r\x12\x0e\n\x06second\x18\x05 \x01(\r\x12!\n\tdevice_id\x18\x06 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:9\xe0@h\xe8@\x01\xf2@\x11USE_DATETIME_TIME\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xa7\x01\n\x12TimeCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x0c\n\x04hour\x18\x02 \x01(\r\x12\x0e\n\x06minute\x18\x03 \x01(\r\x12\x0e\n\x06second\x18\x04 \x01(\r\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:3\xe0@i\xe8@\x02\xf2@\x11USE_DATETIME_TIME\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xd4\x02\n\x19ListEntitiesEventResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x14\n\x0c\x64\x65vice_class\x18\x08 \x01(\t\x12\x32\n\x0b\x65vent_types\x18\t \x03(\tB\x1d\xf2\xb5\x18\x19\x46ixedVector\x12!\n\tdevice_id\x18\n \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:-\xe0@k\xe8@\x01\xf2@\tUSE_EVENT\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\x83\x01\n\rEventResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x12\n\nevent_type\x18\x02 \x01(\t\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@l\xe8@\x01\xf2@\tUSE_EVENT\x8a\x41\x19StateResponseProtoMessage\"\xe9\x02\n\x19ListEntitiesValveResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x14\n\x0c\x64\x65vice_class\x18\x08 \x01(\t\x12\x15\n\rassumed_state\x18\t \x01(\x08\x12\x19\n\x11supports_position\x18\n \x01(\x08\x12\x15\n\rsupports_stop\x18\x0b \x01(\x08\x12!\n\tdevice_id\x18\x0c \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:-\xe0@m\xe8@\x01\xf2@\tUSE_VALVE\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xb5\x01\n\x12ValveStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x10\n\x08position\x18\x02 \x01(\x02\x12*\n\x11\x63urrent_operation\x18\x03 \x01(\x0e\x32\x0f.ValveOperation\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:1\xe0@n\xe8@\x01\xf2@\tUSE_VALVE\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\xa8\x01\n\x13ValveCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x14\n\x0chas_position\x18\x02 \x01(\x08\x12\x10\n\x08position\x18\x03 \x01(\x02\x12\x0c\n\x04stop\x18\x04 \x01(\x08\x12!\n\tdevice_id\x18\x05 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:+\xe0@o\xe8@\x02\xf2@\tUSE_VALVE\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\x99\x02\n\x1cListEntitiesDateTimeResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x08 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:9\xe0@p\xe8@\x01\xf2@\x15USE_DATETIME_DATETIME\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xb4\x01\n\x15\x44\x61teTimeStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x15\n\rmissing_state\x18\x02 \x01(\x08\x12\x15\n\repoch_seconds\x18\x03 \x01(\x07\x12!\n\tdevice_id\x18\x04 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:=\xe0@q\xe8@\x01\xf2@\x15USE_DATETIME_DATETIME\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x98\x01\n\x16\x44\x61teTimeCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x15\n\repoch_seconds\x18\x02 \x01(\x07\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:7\xe0@r\xe8@\x02\xf2@\x15USE_DATETIME_DATETIME\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"\xa2\x02\n\x1aListEntitiesUpdateResponse\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 \n\x04icon\x18\x05 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x06 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x07 \x01(\x0e\x32\x0f.EntityCategory\x12\x14\n\x0c\x64\x65vice_class\x18\x08 \x01(\t\x12!\n\tdevice_id\x18\t \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:.\xe0@t\xe8@\x01\xf2@\nUSE_UPDATE\x8a\x41\x18InfoResponseProtoMessageJ\x04\x08\x04\x10\x05\"\xbb\x02\n\x13UpdateStateResponse\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x15\n\rmissing_state\x18\x02 \x01(\x08\x12\x13\n\x0bin_progress\x18\x03 \x01(\x08\x12\x14\n\x0chas_progress\x18\x04 \x01(\x08\x12\x10\n\x08progress\x18\x05 \x01(\x02\x12\x17\n\x0f\x63urrent_version\x18\x06 \x01(\t\x12\x16\n\x0elatest_version\x18\x07 \x01(\t\x12\r\n\x05title\x18\x08 \x01(\t\x12\x17\n\x0frelease_summary\x18\t \x01(\t\x12\x13\n\x0brelease_url\x18\n \x01(\t\x12!\n\tdevice_id\x18\x0b \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:2\xe0@u\xe8@\x01\xf2@\nUSE_UPDATE\x80\x41\x01\x8a\x41\x19StateResponseProtoMessage\"\x95\x01\n\x14UpdateCommandRequest\x12\x0b\n\x03key\x18\x01 \x01(\x07\x12\x1f\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\x0e.UpdateCommand\x12!\n\tdevice_id\x18\x03 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES:,\xe0@v\xe8@\x02\xf2@\nUSE_UPDATE\x80\x41\x01\x8a\x41\x13\x43ommandProtoMessage\"=\n\x0fZWaveProxyFrame\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c:\x1c\xe0@\x80\x01\xe8@\x00\xf2@\x0fUSE_ZWAVE_PROXY\x80\x41\x01\"b\n\x11ZWaveProxyRequest\x12$\n\x04type\x18\x01 \x01(\x0e\x32\x16.ZWaveProxyRequestType\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c:\x19\xe0@\x81\x01\xe8@\x00\xf2@\x0fUSE_ZWAVE_PROXY\"\xa1\x02\n\x1cListEntitiesInfraredResponse\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 \n\x04icon\x18\x04 \x01(\tB\x12\x92\x41\x0fUSE_ENTITY_ICON\x12\x1b\n\x13\x64isabled_by_default\x18\x05 \x01(\x08\x12(\n\x0f\x65ntity_category\x18\x06 \x01(\x0e\x32\x0f.EntityCategory\x12!\n\tdevice_id\x18\x07 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\x14\n\x0c\x63\x61pabilities\x18\x08 \x01(\r:1\xe0@\x87\x01\xe8@\x01\xf2@\x0cUSE_INFRARED\x8a\x41\x18InfoResponseProtoMessage\"\xb4\x01\n#InfraredRFTransmitRawTimingsRequest\x12!\n\tdevice_id\x18\x01 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12\x19\n\x11\x63\x61rrier_frequency\x18\x03 \x01(\r\x12\x14\n\x0crepeat_count\x18\x04 \x01(\r\x12\x17\n\x07timings\x18\x05 \x03(\x11\x42\x06\x10\x01\xf8\xb5\x18\x01:\x13\xe0@\x88\x01\xe8@\x02\xf2@\tUSE_IR_RF\"\x8d\x01\n\x16InfraredRFReceiveEvent\x12!\n\tdevice_id\x18\x01 \x01(\rB\x0e\x92\x41\x0bUSE_DEVICES\x12\x0b\n\x03key\x18\x02 \x01(\x07\x12+\n\x07timings\x18\x03 \x03(\x11\x42\x1a\x10\x01\xf2\xb5\x18\x14std::vector:\x16\xe0@\x89\x01\xe8@\x01\xf2@\tUSE_IR_RF\x80\x41\x01*f\n\x0e\x45ntityCategory\x12\x18\n\x14\x45NTITY_CATEGORY_NONE\x10\x00\x12\x1a\n\x16\x45NTITY_CATEGORY_CONFIG\x10\x01\x12\x1e\n\x1a\x45NTITY_CATEGORY_DIAGNOSTIC\x10\x02*R\n\x10LegacyCoverState\x12\x1b\n\x17LEGACY_COVER_STATE_OPEN\x10\x00\x12\x1d\n\x19LEGACY_COVER_STATE_CLOSED\x10\x01\x1a\x02\x18\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*v\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\x1a\x02\x18\x01*K\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\x1a\x02\x18\x01*D\n\x0c\x46\x61nDirection\x12\x19\n\x15\x46\x41N_DIRECTION_FORWARD\x10\x00\x12\x19\n\x15\x46\x41N_DIRECTION_REVERSE\x10\x01*\xc7\x02\n\tColorMode\x12\x16\n\x12\x43OLOR_MODE_UNKNOWN\x10\x00\x12\x15\n\x11\x43OLOR_MODE_ON_OFF\x10\x01\x12 \n\x1c\x43OLOR_MODE_LEGACY_BRIGHTNESS\x10\x02\x12\x19\n\x15\x43OLOR_MODE_BRIGHTNESS\x10\x03\x12\x14\n\x10\x43OLOR_MODE_WHITE\x10\x07\x12 \n\x1c\x43OLOR_MODE_COLOR_TEMPERATURE\x10\x0b\x12\x1e\n\x1a\x43OLOR_MODE_COLD_WARM_WHITE\x10\x13\x12\x12\n\x0e\x43OLOR_MODE_RGB\x10#\x12\x18\n\x14\x43OLOR_MODE_RGB_WHITE\x10\'\x12$\n COLOR_MODE_RGB_COLOR_TEMPERATURE\x10/\x12\"\n\x1e\x43OLOR_MODE_RGB_COLD_WARM_WHITE\x10\x33*\xa1\x01\n\x10SensorStateClass\x12\x14\n\x10STATE_CLASS_NONE\x10\x00\x12\x1b\n\x17STATE_CLASS_MEASUREMENT\x10\x01\x12 \n\x1cSTATE_CLASS_TOTAL_INCREASING\x10\x02\x12\x15\n\x11STATE_CLASS_TOTAL\x10\x03\x12!\n\x1dSTATE_CLASS_MEASUREMENT_ANGLE\x10\x04*Y\n\x13SensorLastResetType\x12\x13\n\x0fLAST_RESET_NONE\x10\x00\x12\x14\n\x10LAST_RESET_NEVER\x10\x01\x12\x13\n\x0fLAST_RESET_AUTO\x10\x02\x1a\x02\x18\x01*\xb9\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\x14\n\x10LOG_LEVEL_CONFIG\x10\x04\x12\x13\n\x0fLOG_LEVEL_DEBUG\x10\x05\x12\x15\n\x11LOG_LEVEL_VERBOSE\x10\x06\x12\x1a\n\x16LOG_LEVEL_VERY_VERBOSE\x10\x07*\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*\x8c\x01\n\x14SupportsResponseType\x12\x1a\n\x16SUPPORTS_RESPONSE_NONE\x10\x00\x12\x1e\n\x1aSUPPORTS_RESPONSE_OPTIONAL\x10\x01\x12\x1a\n\x16SUPPORTS_RESPONSE_ONLY\x10\x02\x12\x1c\n\x18SUPPORTS_RESPONSE_STATUS\x10\x64*\xb5\x01\n\x0b\x43limateMode\x12\x14\n\x10\x43LIMATE_MODE_OFF\x10\x00\x12\x1a\n\x16\x43LIMATE_MODE_HEAT_COOL\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\x12\x15\n\x11\x43LIMATE_MODE_AUTO\x10\x06*\xf1\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\x12\x15\n\x11\x43LIMATE_FAN_QUIET\x10\t*{\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_SWING_HORIZONTAL\x10\x03*\xab\x01\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\x12\x17\n\x13\x43LIMATE_ACTION_IDLE\x10\x04\x12\x19\n\x15\x43LIMATE_ACTION_DRYING\x10\x05\x12\x16\n\x12\x43LIMATE_ACTION_FAN\x10\x06*\xdf\x01\n\rClimatePreset\x12\x17\n\x13\x43LIMATE_PRESET_NONE\x10\x00\x12\x17\n\x13\x43LIMATE_PRESET_HOME\x10\x01\x12\x17\n\x13\x43LIMATE_PRESET_AWAY\x10\x02\x12\x18\n\x14\x43LIMATE_PRESET_BOOST\x10\x03\x12\x1a\n\x16\x43LIMATE_PRESET_COMFORT\x10\x04\x12\x16\n\x12\x43LIMATE_PRESET_ECO\x10\x05\x12\x18\n\x14\x43LIMATE_PRESET_SLEEP\x10\x06\x12\x1b\n\x17\x43LIMATE_PRESET_ACTIVITY\x10\x07*\xe9\x01\n\x0fWaterHeaterMode\x12\x19\n\x15WATER_HEATER_MODE_OFF\x10\x00\x12\x19\n\x15WATER_HEATER_MODE_ECO\x10\x01\x12\x1e\n\x1aWATER_HEATER_MODE_ELECTRIC\x10\x02\x12!\n\x1dWATER_HEATER_MODE_PERFORMANCE\x10\x03\x12!\n\x1dWATER_HEATER_MODE_HIGH_DEMAND\x10\x04\x12\x1f\n\x1bWATER_HEATER_MODE_HEAT_PUMP\x10\x05\x12\x19\n\x15WATER_HEATER_MODE_GAS\x10\x06*\xf6\x02\n\x1aWaterHeaterCommandHasField\x12!\n\x1dWATER_HEATER_COMMAND_HAS_NONE\x10\x00\x12!\n\x1dWATER_HEATER_COMMAND_HAS_MODE\x10\x01\x12/\n+WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE\x10\x02\x12&\n\x1eWATER_HEATER_COMMAND_HAS_STATE\x10\x04\x1a\x02\x08\x01\x12\x33\n/WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_LOW\x10\x08\x12\x34\n0WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_HIGH\x10\x10\x12%\n!WATER_HEATER_COMMAND_HAS_ON_STATE\x10 \x12\'\n#WATER_HEATER_COMMAND_HAS_AWAY_STATE\x10@*O\n\nNumberMode\x12\x14\n\x10NUMBER_MODE_AUTO\x10\x00\x12\x13\n\x0fNUMBER_MODE_BOX\x10\x01\x12\x16\n\x12NUMBER_MODE_SLIDER\x10\x02*\x99\x01\n\tLockState\x12\x13\n\x0fLOCK_STATE_NONE\x10\x00\x12\x15\n\x11LOCK_STATE_LOCKED\x10\x01\x12\x17\n\x13LOCK_STATE_UNLOCKED\x10\x02\x12\x15\n\x11LOCK_STATE_JAMMED\x10\x03\x12\x16\n\x12LOCK_STATE_LOCKING\x10\x04\x12\x18\n\x14LOCK_STATE_UNLOCKING\x10\x05*<\n\x0bLockCommand\x12\x0f\n\x0bLOCK_UNLOCK\x10\x00\x12\r\n\tLOCK_LOCK\x10\x01\x12\r\n\tLOCK_OPEN\x10\x02*\xe5\x01\n\x10MediaPlayerState\x12\x1b\n\x17MEDIA_PLAYER_STATE_NONE\x10\x00\x12\x1b\n\x17MEDIA_PLAYER_STATE_IDLE\x10\x01\x12\x1e\n\x1aMEDIA_PLAYER_STATE_PLAYING\x10\x02\x12\x1d\n\x19MEDIA_PLAYER_STATE_PAUSED\x10\x03\x12!\n\x1dMEDIA_PLAYER_STATE_ANNOUNCING\x10\x04\x12\x1a\n\x16MEDIA_PLAYER_STATE_OFF\x10\x05\x12\x19\n\x15MEDIA_PLAYER_STATE_ON\x10\x06*\xf7\x03\n\x12MediaPlayerCommand\x12\x1d\n\x19MEDIA_PLAYER_COMMAND_PLAY\x10\x00\x12\x1e\n\x1aMEDIA_PLAYER_COMMAND_PAUSE\x10\x01\x12\x1d\n\x19MEDIA_PLAYER_COMMAND_STOP\x10\x02\x12\x1d\n\x19MEDIA_PLAYER_COMMAND_MUTE\x10\x03\x12\x1f\n\x1bMEDIA_PLAYER_COMMAND_UNMUTE\x10\x04\x12\x1f\n\x1bMEDIA_PLAYER_COMMAND_TOGGLE\x10\x05\x12\"\n\x1eMEDIA_PLAYER_COMMAND_VOLUME_UP\x10\x06\x12$\n MEDIA_PLAYER_COMMAND_VOLUME_DOWN\x10\x07\x12 \n\x1cMEDIA_PLAYER_COMMAND_ENQUEUE\x10\x08\x12#\n\x1fMEDIA_PLAYER_COMMAND_REPEAT_ONE\x10\t\x12#\n\x1fMEDIA_PLAYER_COMMAND_REPEAT_OFF\x10\n\x12\'\n#MEDIA_PLAYER_COMMAND_CLEAR_PLAYLIST\x10\x0b\x12 \n\x1cMEDIA_PLAYER_COMMAND_TURN_ON\x10\x0c\x12!\n\x1dMEDIA_PLAYER_COMMAND_TURN_OFF\x10\r*q\n\x18MediaPlayerFormatPurpose\x12\'\n#MEDIA_PLAYER_FORMAT_PURPOSE_DEFAULT\x10\x00\x12,\n(MEDIA_PLAYER_FORMAT_PURPOSE_ANNOUNCEMENT\x10\x01*\xef\x02\n\x1a\x42luetoothDeviceRequestType\x12-\n%BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT\x10\x00\x1a\x02\x08\x01\x12,\n(BLUETOOTH_DEVICE_REQUEST_TYPE_DISCONNECT\x10\x01\x12&\n\"BLUETOOTH_DEVICE_REQUEST_TYPE_PAIR\x10\x02\x12(\n$BLUETOOTH_DEVICE_REQUEST_TYPE_UNPAIR\x10\x03\x12\x37\n3BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT_V3_WITH_CACHE\x10\x04\x12:\n6BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT_V3_WITHOUT_CACHE\x10\x05\x12-\n)BLUETOOTH_DEVICE_REQUEST_TYPE_CLEAR_CACHE\x10\x06*\xf3\x01\n\x15\x42luetoothScannerState\x12 \n\x1c\x42LUETOOTH_SCANNER_STATE_IDLE\x10\x00\x12$\n BLUETOOTH_SCANNER_STATE_STARTING\x10\x01\x12#\n\x1f\x42LUETOOTH_SCANNER_STATE_RUNNING\x10\x02\x12\"\n\x1e\x42LUETOOTH_SCANNER_STATE_FAILED\x10\x03\x12$\n BLUETOOTH_SCANNER_STATE_STOPPING\x10\x04\x12#\n\x1f\x42LUETOOTH_SCANNER_STATE_STOPPED\x10\x05*]\n\x14\x42luetoothScannerMode\x12\"\n\x1e\x42LUETOOTH_SCANNER_MODE_PASSIVE\x10\x00\x12!\n\x1d\x42LUETOOTH_SCANNER_MODE_ACTIVE\x10\x01*j\n\x1bVoiceAssistantSubscribeFlag\x12\"\n\x1eVOICE_ASSISTANT_SUBSCRIBE_NONE\x10\x00\x12\'\n#VOICE_ASSISTANT_SUBSCRIBE_API_AUDIO\x10\x01*\x8d\x01\n\x19VoiceAssistantRequestFlag\x12 \n\x1cVOICE_ASSISTANT_REQUEST_NONE\x10\x00\x12#\n\x1fVOICE_ASSISTANT_REQUEST_USE_VAD\x10\x01\x12)\n%VOICE_ASSISTANT_REQUEST_USE_WAKE_WORD\x10\x02*\xa1\x04\n\x13VoiceAssistantEvent\x12\x19\n\x15VOICE_ASSISTANT_ERROR\x10\x00\x12\x1d\n\x19VOICE_ASSISTANT_RUN_START\x10\x01\x12\x1b\n\x17VOICE_ASSISTANT_RUN_END\x10\x02\x12\x1d\n\x19VOICE_ASSISTANT_STT_START\x10\x03\x12\x1b\n\x17VOICE_ASSISTANT_STT_END\x10\x04\x12 \n\x1cVOICE_ASSISTANT_INTENT_START\x10\x05\x12\x1e\n\x1aVOICE_ASSISTANT_INTENT_END\x10\x06\x12\x1d\n\x19VOICE_ASSISTANT_TTS_START\x10\x07\x12\x1b\n\x17VOICE_ASSISTANT_TTS_END\x10\x08\x12#\n\x1fVOICE_ASSISTANT_WAKE_WORD_START\x10\t\x12!\n\x1dVOICE_ASSISTANT_WAKE_WORD_END\x10\n\x12!\n\x1dVOICE_ASSISTANT_STT_VAD_START\x10\x0b\x12\x1f\n\x1bVOICE_ASSISTANT_STT_VAD_END\x10\x0c\x12$\n VOICE_ASSISTANT_TTS_STREAM_START\x10\x62\x12\"\n\x1eVOICE_ASSISTANT_TTS_STREAM_END\x10\x63\x12#\n\x1fVOICE_ASSISTANT_INTENT_PROGRESS\x10\x64*\xa9\x01\n\x18VoiceAssistantTimerEvent\x12!\n\x1dVOICE_ASSISTANT_TIMER_STARTED\x10\x00\x12!\n\x1dVOICE_ASSISTANT_TIMER_UPDATED\x10\x01\x12#\n\x1fVOICE_ASSISTANT_TIMER_CANCELLED\x10\x02\x12\"\n\x1eVOICE_ASSISTANT_TIMER_FINISHED\x10\x03*\xb3\x02\n\x16\x41larmControlPanelState\x12\x18\n\x14\x41LARM_STATE_DISARMED\x10\x00\x12\x1a\n\x16\x41LARM_STATE_ARMED_HOME\x10\x01\x12\x1a\n\x16\x41LARM_STATE_ARMED_AWAY\x10\x02\x12\x1b\n\x17\x41LARM_STATE_ARMED_NIGHT\x10\x03\x12\x1e\n\x1a\x41LARM_STATE_ARMED_VACATION\x10\x04\x12#\n\x1f\x41LARM_STATE_ARMED_CUSTOM_BYPASS\x10\x05\x12\x17\n\x13\x41LARM_STATE_PENDING\x10\x06\x12\x16\n\x12\x41LARM_STATE_ARMING\x10\x07\x12\x19\n\x15\x41LARM_STATE_DISARMING\x10\x08\x12\x19\n\x15\x41LARM_STATE_TRIGGERED\x10\t*\x98\x02\n\x1d\x41larmControlPanelStateCommand\x12\x1e\n\x1a\x41LARM_CONTROL_PANEL_DISARM\x10\x00\x12 \n\x1c\x41LARM_CONTROL_PANEL_ARM_AWAY\x10\x01\x12 \n\x1c\x41LARM_CONTROL_PANEL_ARM_HOME\x10\x02\x12!\n\x1d\x41LARM_CONTROL_PANEL_ARM_NIGHT\x10\x03\x12$\n ALARM_CONTROL_PANEL_ARM_VACATION\x10\x04\x12)\n%ALARM_CONTROL_PANEL_ARM_CUSTOM_BYPASS\x10\x05\x12\x1f\n\x1b\x41LARM_CONTROL_PANEL_TRIGGER\x10\x06*6\n\x08TextMode\x12\x12\n\x0eTEXT_MODE_TEXT\x10\x00\x12\x16\n\x12TEXT_MODE_PASSWORD\x10\x01*j\n\x0eValveOperation\x12\x18\n\x14VALVE_OPERATION_IDLE\x10\x00\x12\x1e\n\x1aVALVE_OPERATION_IS_OPENING\x10\x01\x12\x1e\n\x1aVALVE_OPERATION_IS_CLOSING\x10\x02*]\n\rUpdateCommand\x12\x17\n\x13UPDATE_COMMAND_NONE\x10\x00\x12\x19\n\x15UPDATE_COMMAND_UPDATE\x10\x01\x12\x18\n\x14UPDATE_COMMAND_CHECK\x10\x02*\x96\x01\n\x15ZWaveProxyRequestType\x12&\n\"ZWAVE_PROXY_REQUEST_TYPE_SUBSCRIBE\x10\x00\x12(\n$ZWAVE_PROXY_REQUEST_TYPE_UNSUBSCRIBE\x10\x01\x12+\n\'ZWAVE_PROXY_REQUEST_TYPE_HOME_ID_CHANGE\x10\x02\x32\xd2\x17\n\rAPIConnection\x12.\n\x05hello\x12\r.HelloRequest\x1a\x0e.HelloResponse\"\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\x0f\x65xecute_service\x12\x16.ExecuteServiceRequest\x1a\x05.void\"\x00\x12[\n\x18noise_encryption_set_key\x12\x1d.NoiseEncryptionSetKeyRequest\x1a\x1e.NoiseEncryptionSetKeyResponse\"\x00\x12\x30\n\x0e\x62utton_command\x12\x15.ButtonCommandRequest\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\x12.\n\rcover_command\x12\x14.CoverCommandRequest\x1a\x05.void\"\x00\x12,\n\x0c\x64\x61te_command\x12\x13.DateCommandRequest\x1a\x05.void\"\x00\x12\x34\n\x10\x64\x61tetime_command\x12\x17.DateTimeCommandRequest\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,\n\x0clock_command\x12\x13.LockCommandRequest\x1a\x05.void\"\x00\x12;\n\x14media_player_command\x12\x1a.MediaPlayerCommandRequest\x1a\x05.void\"\x00\x12\x30\n\x0enumber_command\x12\x15.NumberCommandRequest\x1a\x05.void\"\x00\x12\x30\n\x0eselect_command\x12\x15.SelectCommandRequest\x1a\x05.void\"\x00\x12.\n\rsiren_command\x12\x14.SirenCommandRequest\x1a\x05.void\"\x00\x12\x30\n\x0eswitch_command\x12\x15.SwitchCommandRequest\x1a\x05.void\"\x00\x12,\n\x0ctext_command\x12\x13.TextCommandRequest\x1a\x05.void\"\x00\x12,\n\x0ctime_command\x12\x13.TimeCommandRequest\x1a\x05.void\"\x00\x12\x30\n\x0eupdate_command\x12\x15.UpdateCommandRequest\x1a\x05.void\"\x00\x12.\n\rvalve_command\x12\x14.ValveCommandRequest\x1a\x05.void\"\x00\x12;\n\x14water_heater_command\x12\x1a.WaterHeaterCommandRequest\x1a\x05.void\"\x00\x12\\\n%subscribe_bluetooth_le_advertisements\x12*.SubscribeBluetoothLEAdvertisementsRequest\x1a\x05.void\"\x00\x12<\n\x18\x62luetooth_device_request\x12\x17.BluetoothDeviceRequest\x1a\x05.void\"\x00\x12H\n\x1b\x62luetooth_gatt_get_services\x12 .BluetoothGATTGetServicesRequest\x1a\x05.void\"\x00\x12\x39\n\x13\x62luetooth_gatt_read\x12\x19.BluetoothGATTReadRequest\x1a\x05.void\"\x00\x12;\n\x14\x62luetooth_gatt_write\x12\x1a.BluetoothGATTWriteRequest\x1a\x05.void\"\x00\x12N\n\x1e\x62luetooth_gatt_read_descriptor\x12#.BluetoothGATTReadDescriptorRequest\x1a\x05.void\"\x00\x12P\n\x1f\x62luetooth_gatt_write_descriptor\x12$.BluetoothGATTWriteDescriptorRequest\x1a\x05.void\"\x00\x12=\n\x15\x62luetooth_gatt_notify\x12\x1b.BluetoothGATTNotifyRequest\x1a\x05.void\"\x00\x12v\n$subscribe_bluetooth_connections_free\x12).SubscribeBluetoothConnectionsFreeRequest\x1a!.BluetoothConnectionsFreeResponse\"\x00\x12`\n\'unsubscribe_bluetooth_le_advertisements\x12,.UnsubscribeBluetoothLEAdvertisementsRequest\x1a\x05.void\"\x00\x12\x46\n\x1a\x62luetooth_scanner_set_mode\x12\x1f.BluetoothScannerSetModeRequest\x1a\x05.void\"\x00\x12\x45\n\x19subscribe_voice_assistant\x12\x1f.SubscribeVoiceAssistantRequest\x1a\x05.void\"\x00\x12p\n!voice_assistant_get_configuration\x12#.VoiceAssistantConfigurationRequest\x1a$.VoiceAssistantConfigurationResponse\"\x00\x12M\n!voice_assistant_set_configuration\x12\x1f.VoiceAssistantSetConfiguration\x1a\x05.void\"\x00\x12H\n\x1b\x61larm_control_panel_command\x12 .AlarmControlPanelCommandRequest\x1a\x05.void\"\x00\x12.\n\x11zwave_proxy_frame\x12\x10.ZWaveProxyFrame\x1a\x05.void\"\x00\x12\x32\n\x13zwave_proxy_request\x12\x12.ZWaveProxyRequest\x1a\x05.void\"\x00\x12Q\n infrared_rf_transmit_raw_timings\x12$.InfraredRFTransmitRawTimingsRequest\x1a\x05.void\"\x00\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -41,20 +41,18 @@ _globals['_FANSPEED']._serialized_options = b'\030\001' _globals['_SENSORLASTRESETTYPE']._loaded_options = None _globals['_SENSORLASTRESETTYPE']._serialized_options = b'\030\001' + _globals['_WATERHEATERCOMMANDHASFIELD'].values_by_name["WATER_HEATER_COMMAND_HAS_STATE"]._loaded_options = None + _globals['_WATERHEATERCOMMANDHASFIELD'].values_by_name["WATER_HEATER_COMMAND_HAS_STATE"]._serialized_options = b'\010\001' _globals['_BLUETOOTHDEVICEREQUESTTYPE'].values_by_name["BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT"]._loaded_options = None _globals['_BLUETOOTHDEVICEREQUESTTYPE'].values_by_name["BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT"]._serialized_options = b'\010\001' - _globals['_HELLOREQUEST'].fields_by_name['client_info']._loaded_options = None - _globals['_HELLOREQUEST'].fields_by_name['client_info']._serialized_options = b'\340\265\030\001' _globals['_HELLOREQUEST']._loaded_options = None _globals['_HELLOREQUEST']._serialized_options = b'\340@\001\350@\002\200A\001' _globals['_HELLORESPONSE']._loaded_options = None _globals['_HELLORESPONSE']._serialized_options = b'\340@\002\350@\001\200A\001' - _globals['_AUTHENTICATIONREQUEST'].fields_by_name['password']._loaded_options = None - _globals['_AUTHENTICATIONREQUEST'].fields_by_name['password']._serialized_options = b'\340\265\030\001' _globals['_AUTHENTICATIONREQUEST']._loaded_options = None - _globals['_AUTHENTICATIONREQUEST']._serialized_options = b'\340@\003\350@\002\362@\020USE_API_PASSWORD\200A\001' + _globals['_AUTHENTICATIONREQUEST']._serialized_options = b'\030\001\340@\003\350@\002\200A\001' _globals['_AUTHENTICATIONRESPONSE']._loaded_options = None - _globals['_AUTHENTICATIONRESPONSE']._serialized_options = b'\340@\004\350@\001\362@\020USE_API_PASSWORD\200A\001' + _globals['_AUTHENTICATIONRESPONSE']._serialized_options = b'\030\001\340@\004\350@\001\200A\001' _globals['_DISCONNECTREQUEST']._loaded_options = None _globals['_DISCONNECTREQUEST']._serialized_options = b'\340@\005\350@\000\200A\001' _globals['_DISCONNECTRESPONSE']._loaded_options = None @@ -66,7 +64,7 @@ _globals['_DEVICEINFOREQUEST']._loaded_options = None _globals['_DEVICEINFOREQUEST']._serialized_options = b'\340@\t\350@\002' _globals['_DEVICEINFORESPONSE'].fields_by_name['uses_password']._loaded_options = None - _globals['_DEVICEINFORESPONSE'].fields_by_name['uses_password']._serialized_options = b'\222A\020USE_API_PASSWORD' + _globals['_DEVICEINFORESPONSE'].fields_by_name['uses_password']._serialized_options = b'\030\001' _globals['_DEVICEINFORESPONSE'].fields_by_name['has_deep_sleep']._loaded_options = None _globals['_DEVICEINFORESPONSE'].fields_by_name['has_deep_sleep']._serialized_options = b'\222A\016USE_DEEP_SLEEP' _globals['_DEVICEINFORESPONSE'].fields_by_name['project_name']._loaded_options = None @@ -155,8 +153,6 @@ _globals['_FANCOMMANDREQUEST'].fields_by_name['has_speed']._serialized_options = b'\030\001' _globals['_FANCOMMANDREQUEST'].fields_by_name['speed']._loaded_options = None _globals['_FANCOMMANDREQUEST'].fields_by_name['speed']._serialized_options = b'\030\001' - _globals['_FANCOMMANDREQUEST'].fields_by_name['preset_mode']._loaded_options = None - _globals['_FANCOMMANDREQUEST'].fields_by_name['preset_mode']._serialized_options = b'\340\265\030\001' _globals['_FANCOMMANDREQUEST'].fields_by_name['device_id']._loaded_options = None _globals['_FANCOMMANDREQUEST'].fields_by_name['device_id']._serialized_options = b'\222A\013USE_DEVICES' _globals['_FANCOMMANDREQUEST']._loaded_options = None @@ -183,8 +179,6 @@ _globals['_LIGHTSTATERESPONSE'].fields_by_name['device_id']._serialized_options = b'\222A\013USE_DEVICES' _globals['_LIGHTSTATERESPONSE']._loaded_options = None _globals['_LIGHTSTATERESPONSE']._serialized_options = b'\340@\030\350@\001\362@\tUSE_LIGHT\200A\001\212A\031StateResponseProtoMessage' - _globals['_LIGHTCOMMANDREQUEST'].fields_by_name['effect']._loaded_options = None - _globals['_LIGHTCOMMANDREQUEST'].fields_by_name['effect']._serialized_options = b'\340\265\030\001' _globals['_LIGHTCOMMANDREQUEST'].fields_by_name['device_id']._loaded_options = None _globals['_LIGHTCOMMANDREQUEST'].fields_by_name['device_id']._serialized_options = b'\222A\013USE_DEVICES' _globals['_LIGHTCOMMANDREQUEST']._loaded_options = None @@ -229,16 +223,12 @@ _globals['_SUBSCRIBELOGSREQUEST']._serialized_options = b'\340@\034\350@\002' _globals['_SUBSCRIBELOGSRESPONSE']._loaded_options = None _globals['_SUBSCRIBELOGSRESPONSE']._serialized_options = b'\340@\035\350@\001\370@\000\200A\000' - _globals['_NOISEENCRYPTIONSETKEYREQUEST'].fields_by_name['key']._loaded_options = None - _globals['_NOISEENCRYPTIONSETKEYREQUEST'].fields_by_name['key']._serialized_options = b'\340\265\030\001' _globals['_NOISEENCRYPTIONSETKEYREQUEST']._loaded_options = None _globals['_NOISEENCRYPTIONSETKEYREQUEST']._serialized_options = b'\340@|\350@\002\362@\rUSE_API_NOISE' _globals['_NOISEENCRYPTIONSETKEYRESPONSE']._loaded_options = None _globals['_NOISEENCRYPTIONSETKEYRESPONSE']._serialized_options = b'\340@}\350@\001\362@\rUSE_API_NOISE' _globals['_SUBSCRIBEHOMEASSISTANTSERVICESREQUEST']._loaded_options = None _globals['_SUBSCRIBEHOMEASSISTANTSERVICESREQUEST']._serialized_options = b'\340@\"\350@\002\362@\036USE_API_HOMEASSISTANT_SERVICES' - _globals['_HOMEASSISTANTSERVICEMAP'].fields_by_name['value']._loaded_options = None - _globals['_HOMEASSISTANTSERVICEMAP'].fields_by_name['value']._serialized_options = b'\300\265\030\001' _globals['_HOMEASSISTANTACTIONREQUEST'].fields_by_name['data']._loaded_options = None _globals['_HOMEASSISTANTACTIONREQUEST'].fields_by_name['data']._serialized_options = b'\350\265\030\001' _globals['_HOMEASSISTANTACTIONREQUEST'].fields_by_name['data_template']._loaded_options = None @@ -250,29 +240,21 @@ _globals['_HOMEASSISTANTACTIONREQUEST'].fields_by_name['wants_response']._loaded_options = None _globals['_HOMEASSISTANTACTIONREQUEST'].fields_by_name['wants_response']._serialized_options = b'\222A+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON' _globals['_HOMEASSISTANTACTIONREQUEST'].fields_by_name['response_template']._loaded_options = None - _globals['_HOMEASSISTANTACTIONREQUEST'].fields_by_name['response_template']._serialized_options = b'\222A+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON\300\265\030\001' + _globals['_HOMEASSISTANTACTIONREQUEST'].fields_by_name['response_template']._serialized_options = b'\222A+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON' _globals['_HOMEASSISTANTACTIONREQUEST']._loaded_options = None _globals['_HOMEASSISTANTACTIONREQUEST']._serialized_options = b'\340@#\350@\001\362@\036USE_API_HOMEASSISTANT_SERVICES\200A\001' _globals['_HOMEASSISTANTACTIONRESPONSE'].fields_by_name['response_data']._loaded_options = None - _globals['_HOMEASSISTANTACTIONRESPONSE'].fields_by_name['response_data']._serialized_options = b'\222A+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON\340\265\030\001' + _globals['_HOMEASSISTANTACTIONRESPONSE'].fields_by_name['response_data']._serialized_options = b'\222A+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON' _globals['_HOMEASSISTANTACTIONRESPONSE']._loaded_options = None _globals['_HOMEASSISTANTACTIONRESPONSE']._serialized_options = b'\340@\202\001\350@\002\362@&USE_API_HOMEASSISTANT_ACTION_RESPONSES\200A\001' _globals['_SUBSCRIBEHOMEASSISTANTSTATESREQUEST']._loaded_options = None _globals['_SUBSCRIBEHOMEASSISTANTSTATESREQUEST']._serialized_options = b'\340@&\350@\002\362@\034USE_API_HOMEASSISTANT_STATES' _globals['_SUBSCRIBEHOMEASSISTANTSTATERESPONSE']._loaded_options = None _globals['_SUBSCRIBEHOMEASSISTANTSTATERESPONSE']._serialized_options = b'\340@\'\350@\001\362@\034USE_API_HOMEASSISTANT_STATES' - _globals['_HOMEASSISTANTSTATERESPONSE'].fields_by_name['entity_id']._loaded_options = None - _globals['_HOMEASSISTANTSTATERESPONSE'].fields_by_name['entity_id']._serialized_options = b'\340\265\030\001' - _globals['_HOMEASSISTANTSTATERESPONSE'].fields_by_name['state']._loaded_options = None - _globals['_HOMEASSISTANTSTATERESPONSE'].fields_by_name['state']._serialized_options = b'\340\265\030\001' - _globals['_HOMEASSISTANTSTATERESPONSE'].fields_by_name['attribute']._loaded_options = None - _globals['_HOMEASSISTANTSTATERESPONSE'].fields_by_name['attribute']._serialized_options = b'\340\265\030\001' _globals['_HOMEASSISTANTSTATERESPONSE']._loaded_options = None _globals['_HOMEASSISTANTSTATERESPONSE']._serialized_options = b'\340@(\350@\002\362@\034USE_API_HOMEASSISTANT_STATES\200A\001' _globals['_GETTIMEREQUEST']._loaded_options = None _globals['_GETTIMEREQUEST']._serialized_options = b'\340@$\350@\001' - _globals['_GETTIMERESPONSE'].fields_by_name['timezone']._loaded_options = None - _globals['_GETTIMERESPONSE'].fields_by_name['timezone']._serialized_options = b'\340\265\030\001' _globals['_GETTIMERESPONSE']._loaded_options = None _globals['_GETTIMERESPONSE']._serialized_options = b'\340@%\350@\002\200A\001' _globals['_LISTENTITIESSERVICESARGUMENT']._loaded_options = None @@ -345,10 +327,6 @@ _globals['_CLIMATECOMMANDREQUEST'].fields_by_name['unused_has_legacy_away']._serialized_options = b'\030\001' _globals['_CLIMATECOMMANDREQUEST'].fields_by_name['unused_legacy_away']._loaded_options = None _globals['_CLIMATECOMMANDREQUEST'].fields_by_name['unused_legacy_away']._serialized_options = b'\030\001' - _globals['_CLIMATECOMMANDREQUEST'].fields_by_name['custom_fan_mode']._loaded_options = None - _globals['_CLIMATECOMMANDREQUEST'].fields_by_name['custom_fan_mode']._serialized_options = b'\340\265\030\001' - _globals['_CLIMATECOMMANDREQUEST'].fields_by_name['custom_preset']._loaded_options = None - _globals['_CLIMATECOMMANDREQUEST'].fields_by_name['custom_preset']._serialized_options = b'\340\265\030\001' _globals['_CLIMATECOMMANDREQUEST'].fields_by_name['device_id']._loaded_options = None _globals['_CLIMATECOMMANDREQUEST'].fields_by_name['device_id']._serialized_options = b'\222A\013USE_DEVICES' _globals['_CLIMATECOMMANDREQUEST']._loaded_options = None @@ -395,14 +373,14 @@ _globals['_SELECTSTATERESPONSE'].fields_by_name['device_id']._serialized_options = b'\222A\013USE_DEVICES' _globals['_SELECTSTATERESPONSE']._loaded_options = None _globals['_SELECTSTATERESPONSE']._serialized_options = b'\340@5\350@\001\362@\nUSE_SELECT\200A\001\212A\031StateResponseProtoMessage' - _globals['_SELECTCOMMANDREQUEST'].fields_by_name['state']._loaded_options = None - _globals['_SELECTCOMMANDREQUEST'].fields_by_name['state']._serialized_options = b'\340\265\030\001' _globals['_SELECTCOMMANDREQUEST'].fields_by_name['device_id']._loaded_options = None _globals['_SELECTCOMMANDREQUEST'].fields_by_name['device_id']._serialized_options = b'\222A\013USE_DEVICES' _globals['_SELECTCOMMANDREQUEST']._loaded_options = None _globals['_SELECTCOMMANDREQUEST']._serialized_options = b'\340@6\350@\002\362@\nUSE_SELECT\200A\001\212A\023CommandProtoMessage' _globals['_LISTENTITIESSIRENRESPONSE'].fields_by_name['icon']._loaded_options = None _globals['_LISTENTITIESSIRENRESPONSE'].fields_by_name['icon']._serialized_options = b'\222A\017USE_ENTITY_ICON' + _globals['_LISTENTITIESSIRENRESPONSE'].fields_by_name['tones']._loaded_options = None + _globals['_LISTENTITIESSIRENRESPONSE'].fields_by_name['tones']._serialized_options = b'\362\265\030\031FixedVector' _globals['_LISTENTITIESSIRENRESPONSE'].fields_by_name['device_id']._loaded_options = None _globals['_LISTENTITIESSIRENRESPONSE'].fields_by_name['device_id']._serialized_options = b'\222A\013USE_DEVICES' _globals['_LISTENTITIESSIRENRESPONSE']._loaded_options = None @@ -493,14 +471,10 @@ _globals['_BLUETOOTHGATTREADREQUEST']._serialized_options = b'\340@I\350@\002\362@\023USE_BLUETOOTH_PROXY' _globals['_BLUETOOTHGATTREADRESPONSE']._loaded_options = None _globals['_BLUETOOTHGATTREADRESPONSE']._serialized_options = b'\340@J\350@\001\362@\023USE_BLUETOOTH_PROXY' - _globals['_BLUETOOTHGATTWRITEREQUEST'].fields_by_name['data']._loaded_options = None - _globals['_BLUETOOTHGATTWRITEREQUEST'].fields_by_name['data']._serialized_options = b'\340\265\030\001' _globals['_BLUETOOTHGATTWRITEREQUEST']._loaded_options = None _globals['_BLUETOOTHGATTWRITEREQUEST']._serialized_options = b'\340@K\350@\002\362@\023USE_BLUETOOTH_PROXY' _globals['_BLUETOOTHGATTREADDESCRIPTORREQUEST']._loaded_options = None _globals['_BLUETOOTHGATTREADDESCRIPTORREQUEST']._serialized_options = b'\340@L\350@\002\362@\023USE_BLUETOOTH_PROXY' - _globals['_BLUETOOTHGATTWRITEDESCRIPTORREQUEST'].fields_by_name['data']._loaded_options = None - _globals['_BLUETOOTHGATTWRITEDESCRIPTORREQUEST'].fields_by_name['data']._serialized_options = b'\340\265\030\001' _globals['_BLUETOOTHGATTWRITEDESCRIPTORREQUEST']._loaded_options = None _globals['_BLUETOOTHGATTWRITEDESCRIPTORREQUEST']._serialized_options = b'\340@M\350@\002\362@\023USE_BLUETOOTH_PROXY' _globals['_BLUETOOTHGATTNOTIFYREQUEST']._loaded_options = None @@ -539,6 +513,8 @@ _globals['_VOICEASSISTANTRESPONSE']._serialized_options = b'\340@[\350@\002\362@\023USE_VOICE_ASSISTANT' _globals['_VOICEASSISTANTEVENTRESPONSE']._loaded_options = None _globals['_VOICEASSISTANTEVENTRESPONSE']._serialized_options = b'\340@\\\350@\002\362@\023USE_VOICE_ASSISTANT' + _globals['_VOICEASSISTANTAUDIO'].fields_by_name['data']._loaded_options = None + _globals['_VOICEASSISTANTAUDIO'].fields_by_name['data']._serialized_options = b'\340\265\030\001' _globals['_VOICEASSISTANTAUDIO']._loaded_options = None _globals['_VOICEASSISTANTAUDIO']._serialized_options = b'\340@j\350@\000\362@\023USE_VOICE_ASSISTANT' _globals['_VOICEASSISTANTTIMEREVENTRESPONSE']._loaded_options = None @@ -665,398 +641,416 @@ _globals['_UPDATECOMMANDREQUEST'].fields_by_name['device_id']._serialized_options = b'\222A\013USE_DEVICES' _globals['_UPDATECOMMANDREQUEST']._loaded_options = None _globals['_UPDATECOMMANDREQUEST']._serialized_options = b'\340@v\350@\002\362@\nUSE_UPDATE\200A\001\212A\023CommandProtoMessage' - _globals['_ZWAVEPROXYFRAME'].fields_by_name['data']._loaded_options = None - _globals['_ZWAVEPROXYFRAME'].fields_by_name['data']._serialized_options = b'\340\265\030\001' _globals['_ZWAVEPROXYFRAME']._loaded_options = None _globals['_ZWAVEPROXYFRAME']._serialized_options = b'\340@\200\001\350@\000\362@\017USE_ZWAVE_PROXY\200A\001' - _globals['_ZWAVEPROXYREQUEST'].fields_by_name['data']._loaded_options = None - _globals['_ZWAVEPROXYREQUEST'].fields_by_name['data']._serialized_options = b'\340\265\030\001' _globals['_ZWAVEPROXYREQUEST']._loaded_options = None _globals['_ZWAVEPROXYREQUEST']._serialized_options = b'\340@\201\001\350@\000\362@\017USE_ZWAVE_PROXY' + _globals['_LISTENTITIESINFRAREDRESPONSE'].fields_by_name['icon']._loaded_options = None + _globals['_LISTENTITIESINFRAREDRESPONSE'].fields_by_name['icon']._serialized_options = b'\222A\017USE_ENTITY_ICON' + _globals['_LISTENTITIESINFRAREDRESPONSE'].fields_by_name['device_id']._loaded_options = None + _globals['_LISTENTITIESINFRAREDRESPONSE'].fields_by_name['device_id']._serialized_options = b'\222A\013USE_DEVICES' + _globals['_LISTENTITIESINFRAREDRESPONSE']._loaded_options = None + _globals['_LISTENTITIESINFRAREDRESPONSE']._serialized_options = b'\340@\207\001\350@\001\362@\014USE_INFRARED\212A\030InfoResponseProtoMessage' + _globals['_INFRAREDRFTRANSMITRAWTIMINGSREQUEST'].fields_by_name['device_id']._loaded_options = None + _globals['_INFRAREDRFTRANSMITRAWTIMINGSREQUEST'].fields_by_name['device_id']._serialized_options = b'\222A\013USE_DEVICES' + _globals['_INFRAREDRFTRANSMITRAWTIMINGSREQUEST'].fields_by_name['timings']._loaded_options = None + _globals['_INFRAREDRFTRANSMITRAWTIMINGSREQUEST'].fields_by_name['timings']._serialized_options = b'\020\001\370\265\030\001' + _globals['_INFRAREDRFTRANSMITRAWTIMINGSREQUEST']._loaded_options = None + _globals['_INFRAREDRFTRANSMITRAWTIMINGSREQUEST']._serialized_options = b'\340@\210\001\350@\002\362@\tUSE_IR_RF' + _globals['_INFRAREDRFRECEIVEEVENT'].fields_by_name['device_id']._loaded_options = None + _globals['_INFRAREDRFRECEIVEEVENT'].fields_by_name['device_id']._serialized_options = b'\222A\013USE_DEVICES' + _globals['_INFRAREDRFRECEIVEEVENT'].fields_by_name['timings']._loaded_options = None + _globals['_INFRAREDRFRECEIVEEVENT'].fields_by_name['timings']._serialized_options = b'\020\001\362\265\030\024std::vector' + _globals['_INFRAREDRFRECEIVEEVENT']._loaded_options = None + _globals['_INFRAREDRFRECEIVEEVENT']._serialized_options = b'\340@\211\001\350@\001\362@\tUSE_IR_RF\200A\001' _globals['_APICONNECTION'].methods_by_name['hello']._loaded_options = None _globals['_APICONNECTION'].methods_by_name['hello']._serialized_options = b'\360@\000\370@\000' - _globals['_APICONNECTION'].methods_by_name['authenticate']._loaded_options = None - _globals['_APICONNECTION'].methods_by_name['authenticate']._serialized_options = b'\360@\000\370@\000' _globals['_APICONNECTION'].methods_by_name['disconnect']._loaded_options = None _globals['_APICONNECTION'].methods_by_name['disconnect']._serialized_options = b'\360@\000\370@\000' _globals['_APICONNECTION'].methods_by_name['ping']._loaded_options = None _globals['_APICONNECTION'].methods_by_name['ping']._serialized_options = b'\360@\000\370@\000' _globals['_APICONNECTION'].methods_by_name['device_info']._loaded_options = None _globals['_APICONNECTION'].methods_by_name['device_info']._serialized_options = b'\370@\000' - _globals['_ENTITYCATEGORY']._serialized_start=29616 - _globals['_ENTITYCATEGORY']._serialized_end=29718 - _globals['_LEGACYCOVERSTATE']._serialized_start=29720 - _globals['_LEGACYCOVERSTATE']._serialized_end=29802 - _globals['_COVEROPERATION']._serialized_start=29804 - _globals['_COVEROPERATION']._serialized_end=29910 - _globals['_LEGACYCOVERCOMMAND']._serialized_start=29912 - _globals['_LEGACYCOVERCOMMAND']._serialized_end=30030 - _globals['_FANSPEED']._serialized_start=30032 - _globals['_FANSPEED']._serialized_end=30107 - _globals['_FANDIRECTION']._serialized_start=30109 - _globals['_FANDIRECTION']._serialized_end=30177 - _globals['_COLORMODE']._serialized_start=30180 - _globals['_COLORMODE']._serialized_end=30507 - _globals['_SENSORSTATECLASS']._serialized_start=30510 - _globals['_SENSORSTATECLASS']._serialized_end=30671 - _globals['_SENSORLASTRESETTYPE']._serialized_start=30673 - _globals['_SENSORLASTRESETTYPE']._serialized_end=30762 - _globals['_LOGLEVEL']._serialized_start=30765 - _globals['_LOGLEVEL']._serialized_end=30950 - _globals['_SERVICEARGTYPE']._serialized_start=30953 - _globals['_SERVICEARGTYPE']._serialized_end=31213 - _globals['_SUPPORTSRESPONSETYPE']._serialized_start=31216 - _globals['_SUPPORTSRESPONSETYPE']._serialized_end=31356 - _globals['_CLIMATEMODE']._serialized_start=31359 - _globals['_CLIMATEMODE']._serialized_end=31540 - _globals['_CLIMATEFANMODE']._serialized_start=31543 - _globals['_CLIMATEFANMODE']._serialized_end=31784 - _globals['_CLIMATESWINGMODE']._serialized_start=31786 - _globals['_CLIMATESWINGMODE']._serialized_end=31909 - _globals['_CLIMATEACTION']._serialized_start=31912 - _globals['_CLIMATEACTION']._serialized_end=32083 - _globals['_CLIMATEPRESET']._serialized_start=32086 - _globals['_CLIMATEPRESET']._serialized_end=32309 - _globals['_WATERHEATERMODE']._serialized_start=32312 - _globals['_WATERHEATERMODE']._serialized_end=32545 - _globals['_WATERHEATERCOMMANDHASFIELD']._serialized_start=32548 - _globals['_WATERHEATERCOMMANDHASFIELD']._serialized_end=32838 - _globals['_NUMBERMODE']._serialized_start=32840 - _globals['_NUMBERMODE']._serialized_end=32919 - _globals['_LOCKSTATE']._serialized_start=32922 - _globals['_LOCKSTATE']._serialized_end=33075 - _globals['_LOCKCOMMAND']._serialized_start=33077 - _globals['_LOCKCOMMAND']._serialized_end=33137 - _globals['_MEDIAPLAYERSTATE']._serialized_start=33140 - _globals['_MEDIAPLAYERSTATE']._serialized_end=33369 - _globals['_MEDIAPLAYERCOMMAND']._serialized_start=33372 - _globals['_MEDIAPLAYERCOMMAND']._serialized_end=33875 - _globals['_MEDIAPLAYERFORMATPURPOSE']._serialized_start=33877 - _globals['_MEDIAPLAYERFORMATPURPOSE']._serialized_end=33990 - _globals['_BLUETOOTHDEVICEREQUESTTYPE']._serialized_start=33993 - _globals['_BLUETOOTHDEVICEREQUESTTYPE']._serialized_end=34360 - _globals['_BLUETOOTHSCANNERSTATE']._serialized_start=34363 - _globals['_BLUETOOTHSCANNERSTATE']._serialized_end=34606 - _globals['_BLUETOOTHSCANNERMODE']._serialized_start=34608 - _globals['_BLUETOOTHSCANNERMODE']._serialized_end=34701 - _globals['_VOICEASSISTANTSUBSCRIBEFLAG']._serialized_start=34703 - _globals['_VOICEASSISTANTSUBSCRIBEFLAG']._serialized_end=34809 - _globals['_VOICEASSISTANTREQUESTFLAG']._serialized_start=34812 - _globals['_VOICEASSISTANTREQUESTFLAG']._serialized_end=34953 - _globals['_VOICEASSISTANTEVENT']._serialized_start=34956 - _globals['_VOICEASSISTANTEVENT']._serialized_end=35501 - _globals['_VOICEASSISTANTTIMEREVENT']._serialized_start=35504 - _globals['_VOICEASSISTANTTIMEREVENT']._serialized_end=35673 - _globals['_ALARMCONTROLPANELSTATE']._serialized_start=35676 - _globals['_ALARMCONTROLPANELSTATE']._serialized_end=35983 - _globals['_ALARMCONTROLPANELSTATECOMMAND']._serialized_start=35986 - _globals['_ALARMCONTROLPANELSTATECOMMAND']._serialized_end=36266 - _globals['_TEXTMODE']._serialized_start=36268 - _globals['_TEXTMODE']._serialized_end=36322 - _globals['_VALVEOPERATION']._serialized_start=36324 - _globals['_VALVEOPERATION']._serialized_end=36430 - _globals['_UPDATECOMMAND']._serialized_start=36432 - _globals['_UPDATECOMMAND']._serialized_end=36525 - _globals['_ZWAVEPROXYREQUESTTYPE']._serialized_start=36528 - _globals['_ZWAVEPROXYREQUESTTYPE']._serialized_end=36678 + _globals['_ENTITYCATEGORY']._serialized_start=30109 + _globals['_ENTITYCATEGORY']._serialized_end=30211 + _globals['_LEGACYCOVERSTATE']._serialized_start=30213 + _globals['_LEGACYCOVERSTATE']._serialized_end=30295 + _globals['_COVEROPERATION']._serialized_start=30297 + _globals['_COVEROPERATION']._serialized_end=30403 + _globals['_LEGACYCOVERCOMMAND']._serialized_start=30405 + _globals['_LEGACYCOVERCOMMAND']._serialized_end=30523 + _globals['_FANSPEED']._serialized_start=30525 + _globals['_FANSPEED']._serialized_end=30600 + _globals['_FANDIRECTION']._serialized_start=30602 + _globals['_FANDIRECTION']._serialized_end=30670 + _globals['_COLORMODE']._serialized_start=30673 + _globals['_COLORMODE']._serialized_end=31000 + _globals['_SENSORSTATECLASS']._serialized_start=31003 + _globals['_SENSORSTATECLASS']._serialized_end=31164 + _globals['_SENSORLASTRESETTYPE']._serialized_start=31166 + _globals['_SENSORLASTRESETTYPE']._serialized_end=31255 + _globals['_LOGLEVEL']._serialized_start=31258 + _globals['_LOGLEVEL']._serialized_end=31443 + _globals['_SERVICEARGTYPE']._serialized_start=31446 + _globals['_SERVICEARGTYPE']._serialized_end=31706 + _globals['_SUPPORTSRESPONSETYPE']._serialized_start=31709 + _globals['_SUPPORTSRESPONSETYPE']._serialized_end=31849 + _globals['_CLIMATEMODE']._serialized_start=31852 + _globals['_CLIMATEMODE']._serialized_end=32033 + _globals['_CLIMATEFANMODE']._serialized_start=32036 + _globals['_CLIMATEFANMODE']._serialized_end=32277 + _globals['_CLIMATESWINGMODE']._serialized_start=32279 + _globals['_CLIMATESWINGMODE']._serialized_end=32402 + _globals['_CLIMATEACTION']._serialized_start=32405 + _globals['_CLIMATEACTION']._serialized_end=32576 + _globals['_CLIMATEPRESET']._serialized_start=32579 + _globals['_CLIMATEPRESET']._serialized_end=32802 + _globals['_WATERHEATERMODE']._serialized_start=32805 + _globals['_WATERHEATERMODE']._serialized_end=33038 + _globals['_WATERHEATERCOMMANDHASFIELD']._serialized_start=33041 + _globals['_WATERHEATERCOMMANDHASFIELD']._serialized_end=33415 + _globals['_NUMBERMODE']._serialized_start=33417 + _globals['_NUMBERMODE']._serialized_end=33496 + _globals['_LOCKSTATE']._serialized_start=33499 + _globals['_LOCKSTATE']._serialized_end=33652 + _globals['_LOCKCOMMAND']._serialized_start=33654 + _globals['_LOCKCOMMAND']._serialized_end=33714 + _globals['_MEDIAPLAYERSTATE']._serialized_start=33717 + _globals['_MEDIAPLAYERSTATE']._serialized_end=33946 + _globals['_MEDIAPLAYERCOMMAND']._serialized_start=33949 + _globals['_MEDIAPLAYERCOMMAND']._serialized_end=34452 + _globals['_MEDIAPLAYERFORMATPURPOSE']._serialized_start=34454 + _globals['_MEDIAPLAYERFORMATPURPOSE']._serialized_end=34567 + _globals['_BLUETOOTHDEVICEREQUESTTYPE']._serialized_start=34570 + _globals['_BLUETOOTHDEVICEREQUESTTYPE']._serialized_end=34937 + _globals['_BLUETOOTHSCANNERSTATE']._serialized_start=34940 + _globals['_BLUETOOTHSCANNERSTATE']._serialized_end=35183 + _globals['_BLUETOOTHSCANNERMODE']._serialized_start=35185 + _globals['_BLUETOOTHSCANNERMODE']._serialized_end=35278 + _globals['_VOICEASSISTANTSUBSCRIBEFLAG']._serialized_start=35280 + _globals['_VOICEASSISTANTSUBSCRIBEFLAG']._serialized_end=35386 + _globals['_VOICEASSISTANTREQUESTFLAG']._serialized_start=35389 + _globals['_VOICEASSISTANTREQUESTFLAG']._serialized_end=35530 + _globals['_VOICEASSISTANTEVENT']._serialized_start=35533 + _globals['_VOICEASSISTANTEVENT']._serialized_end=36078 + _globals['_VOICEASSISTANTTIMEREVENT']._serialized_start=36081 + _globals['_VOICEASSISTANTTIMEREVENT']._serialized_end=36250 + _globals['_ALARMCONTROLPANELSTATE']._serialized_start=36253 + _globals['_ALARMCONTROLPANELSTATE']._serialized_end=36560 + _globals['_ALARMCONTROLPANELSTATECOMMAND']._serialized_start=36563 + _globals['_ALARMCONTROLPANELSTATECOMMAND']._serialized_end=36843 + _globals['_TEXTMODE']._serialized_start=36845 + _globals['_TEXTMODE']._serialized_end=36899 + _globals['_VALVEOPERATION']._serialized_start=36901 + _globals['_VALVEOPERATION']._serialized_end=37007 + _globals['_UPDATECOMMAND']._serialized_start=37009 + _globals['_UPDATECOMMAND']._serialized_end=37102 + _globals['_ZWAVEPROXYREQUESTTYPE']._serialized_start=37105 + _globals['_ZWAVEPROXYREQUESTTYPE']._serialized_end=37255 _globals['_HELLOREQUEST']._serialized_start=32 - _globals['_HELLOREQUEST']._serialized_end=138 - _globals['_HELLORESPONSE']._serialized_start=140 - _globals['_HELLORESPONSE']._serialized_end=255 - _globals['_AUTHENTICATIONREQUEST']._serialized_start=257 - _globals['_AUTHENTICATIONREQUEST']._serialized_end=334 - _globals['_AUTHENTICATIONRESPONSE']._serialized_start=336 - _globals['_AUTHENTICATIONRESPONSE']._serialized_end=416 - _globals['_DISCONNECTREQUEST']._serialized_start=418 - _globals['_DISCONNECTREQUEST']._serialized_end=448 - _globals['_DISCONNECTRESPONSE']._serialized_start=450 - _globals['_DISCONNECTRESPONSE']._serialized_end=481 - _globals['_PINGREQUEST']._serialized_start=483 - _globals['_PINGREQUEST']._serialized_end=504 - _globals['_PINGRESPONSE']._serialized_start=506 - _globals['_PINGRESPONSE']._serialized_end=528 - _globals['_DEVICEINFOREQUEST']._serialized_start=530 - _globals['_DEVICEINFOREQUEST']._serialized_end=557 - _globals['_AREAINFO']._serialized_start=559 - _globals['_AREAINFO']._serialized_end=600 - _globals['_DEVICEINFO']._serialized_start=602 - _globals['_DEVICEINFO']._serialized_end=664 - _globals['_DEVICEINFORESPONSE']._serialized_start=667 - _globals['_DEVICEINFORESPONSE']._serialized_end=1739 - _globals['_LISTENTITIESREQUEST']._serialized_start=1741 - _globals['_LISTENTITIESREQUEST']._serialized_end=1770 - _globals['_LISTENTITIESDONERESPONSE']._serialized_start=1772 - _globals['_LISTENTITIESDONERESPONSE']._serialized_end=1809 - _globals['_SUBSCRIBESTATESREQUEST']._serialized_start=1811 - _globals['_SUBSCRIBESTATESREQUEST']._serialized_end=1843 - _globals['_LISTENTITIESBINARYSENSORRESPONSE']._serialized_start=1846 - _globals['_LISTENTITIESBINARYSENSORRESPONSE']._serialized_end=2182 - _globals['_BINARYSENSORSTATERESPONSE']._serialized_start=2185 - _globals['_BINARYSENSORSTATERESPONSE']._serialized_end=2357 - _globals['_LISTENTITIESCOVERRESPONSE']._serialized_start=2360 - _globals['_LISTENTITIESCOVERRESPONSE']._serialized_end=2744 - _globals['_COVERSTATERESPONSE']._serialized_start=2747 - _globals['_COVERSTATERESPONSE']._serialized_end=2987 - _globals['_COVERCOMMANDREQUEST']._serialized_start=2990 - _globals['_COVERCOMMANDREQUEST']._serialized_end=3271 - _globals['_LISTENTITIESFANRESPONSE']._serialized_start=3274 - _globals['_LISTENTITIESFANRESPONSE']._serialized_end=3712 - _globals['_FANSTATERESPONSE']._serialized_start=3715 - _globals['_FANSTATERESPONSE']._serialized_end=3972 - _globals['_FANCOMMANDREQUEST']._serialized_start=3975 - _globals['_FANCOMMANDREQUEST']._serialized_end=4373 - _globals['_LISTENTITIESLIGHTRESPONSE']._serialized_start=4376 - _globals['_LISTENTITIESLIGHTRESPONSE']._serialized_end=4960 - _globals['_LIGHTSTATERESPONSE']._serialized_start=4963 - _globals['_LIGHTSTATERESPONSE']._serialized_end=5315 - _globals['_LIGHTCOMMANDREQUEST']._serialized_start=5318 - _globals['_LIGHTCOMMANDREQUEST']._serialized_end=6009 - _globals['_LISTENTITIESSENSORRESPONSE']._serialized_start=6012 - _globals['_LISTENTITIESSENSORRESPONSE']._serialized_end=6478 - _globals['_SENSORSTATERESPONSE']._serialized_start=6481 - _globals['_SENSORSTATERESPONSE']._serialized_end=6640 - _globals['_LISTENTITIESSWITCHRESPONSE']._serialized_start=6643 - _globals['_LISTENTITIESSWITCHRESPONSE']._serialized_end=6956 - _globals['_SWITCHSTATERESPONSE']._serialized_start=6959 - _globals['_SWITCHSTATERESPONSE']._serialized_end=7095 - _globals['_SWITCHCOMMANDREQUEST']._serialized_start=7098 - _globals['_SWITCHCOMMANDREQUEST']._serialized_end=7229 - _globals['_LISTENTITIESTEXTSENSORRESPONSE']._serialized_start=7232 - _globals['_LISTENTITIESTEXTSENSORRESPONSE']._serialized_end=7531 - _globals['_TEXTSENSORSTATERESPONSE']._serialized_start=7534 - _globals['_TEXTSENSORSTATERESPONSE']._serialized_end=7702 - _globals['_SUBSCRIBELOGSREQUEST']._serialized_start=7704 - _globals['_SUBSCRIBELOGSREQUEST']._serialized_end=7781 - _globals['_SUBSCRIBELOGSRESPONSE']._serialized_start=7783 - _globals['_SUBSCRIBELOGSRESPONSE']._serialized_end=7863 - _globals['_NOISEENCRYPTIONSETKEYREQUEST']._serialized_start=7865 - _globals['_NOISEENCRYPTIONSETKEYREQUEST']._serialized_end=7938 - _globals['_NOISEENCRYPTIONSETKEYRESPONSE']._serialized_start=7940 - _globals['_NOISEENCRYPTIONSETKEYRESPONSE']._serialized_end=8012 - _globals['_SUBSCRIBEHOMEASSISTANTSERVICESREQUEST']._serialized_start=8014 - _globals['_SUBSCRIBEHOMEASSISTANTSERVICESREQUEST']._serialized_end=8094 - _globals['_HOMEASSISTANTSERVICEMAP']._serialized_start=8096 - _globals['_HOMEASSISTANTSERVICEMAP']._serialized_end=8155 - _globals['_HOMEASSISTANTACTIONREQUEST']._serialized_start=8158 - _globals['_HOMEASSISTANTACTIONREQUEST']._serialized_end=8628 - _globals['_HOMEASSISTANTACTIONRESPONSE']._serialized_start=8631 - _globals['_HOMEASSISTANTACTIONRESPONSE']._serialized_end=8845 - _globals['_SUBSCRIBEHOMEASSISTANTSTATESREQUEST']._serialized_start=8847 - _globals['_SUBSCRIBEHOMEASSISTANTSTATESREQUEST']._serialized_end=8923 - _globals['_SUBSCRIBEHOMEASSISTANTSTATERESPONSE']._serialized_start=8926 - _globals['_SUBSCRIBEHOMEASSISTANTSTATERESPONSE']._serialized_end=9054 - _globals['_HOMEASSISTANTSTATERESPONSE']._serialized_start=9057 - _globals['_HOMEASSISTANTSTATERESPONSE']._serialized_end=9198 - _globals['_GETTIMEREQUEST']._serialized_start=9200 - _globals['_GETTIMEREQUEST']._serialized_end=9224 - _globals['_GETTIMERESPONSE']._serialized_start=9226 - _globals['_GETTIMERESPONSE']._serialized_end=9301 - _globals['_LISTENTITIESSERVICESARGUMENT']._serialized_start=9303 - _globals['_LISTENTITIESSERVICESARGUMENT']._serialized_end=9411 - _globals['_LISTENTITIESSERVICESRESPONSE']._serialized_start=9414 - _globals['_LISTENTITIESSERVICESRESPONSE']._serialized_end=9611 - _globals['_EXECUTESERVICEARGUMENT']._serialized_start=9614 - _globals['_EXECUTESERVICEARGUMENT']._serialized_end=9865 - _globals['_EXECUTESERVICEREQUEST']._serialized_start=9868 - _globals['_EXECUTESERVICEREQUEST']._serialized_end=10117 - _globals['_EXECUTESERVICERESPONSE']._serialized_start=10120 - _globals['_EXECUTESERVICERESPONSE']._serialized_end=10327 - _globals['_LISTENTITIESCAMERARESPONSE']._serialized_start=10330 - _globals['_LISTENTITIESCAMERARESPONSE']._serialized_end=10598 - _globals['_CAMERAIMAGERESPONSE']._serialized_start=10601 - _globals['_CAMERAIMAGERESPONSE']._serialized_end=10747 - _globals['_CAMERAIMAGEREQUEST']._serialized_start=10749 - _globals['_CAMERAIMAGEREQUEST']._serialized_end=10825 - _globals['_LISTENTITIESCLIMATERESPONSE']._serialized_start=10828 - _globals['_LISTENTITIESCLIMATERESPONSE']._serialized_end=11977 - _globals['_CLIMATESTATERESPONSE']._serialized_start=11980 - _globals['_CLIMATESTATERESPONSE']._serialized_end=12522 - _globals['_CLIMATECOMMANDREQUEST']._serialized_start=12525 - _globals['_CLIMATECOMMANDREQUEST']._serialized_end=13297 - _globals['_LISTENTITIESWATERHEATERRESPONSE']._serialized_start=13300 - _globals['_LISTENTITIESWATERHEATERRESPONSE']._serialized_end=13767 - _globals['_WATERHEATERSTATERESPONSE']._serialized_start=13770 - _globals['_WATERHEATERSTATERESPONSE']._serialized_end=14072 - _globals['_WATERHEATERCOMMANDREQUEST']._serialized_start=14075 - _globals['_WATERHEATERCOMMANDREQUEST']._serialized_end=14363 - _globals['_LISTENTITIESNUMBERRESPONSE']._serialized_start=14366 - _globals['_LISTENTITIESNUMBERRESPONSE']._serialized_end=14764 - _globals['_NUMBERSTATERESPONSE']._serialized_start=14767 - _globals['_NUMBERSTATERESPONSE']._serialized_end=14926 - _globals['_NUMBERCOMMANDREQUEST']._serialized_start=14929 - _globals['_NUMBERCOMMANDREQUEST']._serialized_end=15060 - _globals['_LISTENTITIESSELECTRESPONSE']._serialized_start=15063 - _globals['_LISTENTITIESSELECTRESPONSE']._serialized_end=15379 - _globals['_SELECTSTATERESPONSE']._serialized_start=15382 - _globals['_SELECTSTATERESPONSE']._serialized_end=15541 - _globals['_SELECTCOMMANDREQUEST']._serialized_start=15544 - _globals['_SELECTCOMMANDREQUEST']._serialized_end=15681 - _globals['_LISTENTITIESSIRENRESPONSE']._serialized_start=15684 - _globals['_LISTENTITIESSIRENRESPONSE']._serialized_end=16017 - _globals['_SIRENSTATERESPONSE']._serialized_start=16020 - _globals['_SIRENSTATERESPONSE']._serialized_end=16154 - _globals['_SIRENCOMMANDREQUEST']._serialized_start=16157 - _globals['_SIRENCOMMANDREQUEST']._serialized_end=16413 - _globals['_LISTENTITIESLOCKRESPONSE']._serialized_start=16416 - _globals['_LISTENTITIESLOCKRESPONSE']._serialized_end=16770 - _globals['_LOCKSTATERESPONSE']._serialized_start=16773 - _globals['_LOCKSTATERESPONSE']._serialized_end=16917 - _globals['_LOCKCOMMANDREQUEST']._serialized_start=16920 - _globals['_LOCKCOMMANDREQUEST']._serialized_end=17095 - _globals['_LISTENTITIESBUTTONRESPONSE']._serialized_start=17098 - _globals['_LISTENTITIESBUTTONRESPONSE']._serialized_end=17388 - _globals['_BUTTONCOMMANDREQUEST']._serialized_start=17390 - _globals['_BUTTONCOMMANDREQUEST']._serialized_end=17506 - _globals['_MEDIAPLAYERSUPPORTEDFORMAT']._serialized_start=17509 - _globals['_MEDIAPLAYERSUPPORTEDFORMAT']._serialized_end=17683 - _globals['_LISTENTITIESMEDIAPLAYERRESPONSE']._serialized_start=17686 - _globals['_LISTENTITIESMEDIAPLAYERRESPONSE']._serialized_end=18068 - _globals['_MEDIAPLAYERSTATERESPONSE']._serialized_start=18071 - _globals['_MEDIAPLAYERSTATERESPONSE']._serialized_end=18268 - _globals['_MEDIAPLAYERCOMMANDREQUEST']._serialized_start=18271 - _globals['_MEDIAPLAYERCOMMANDREQUEST']._serialized_end=18583 - _globals['_SUBSCRIBEBLUETOOTHLEADVERTISEMENTSREQUEST']._serialized_start=18585 - _globals['_SUBSCRIBEBLUETOOTHLEADVERTISEMENTSREQUEST']._serialized_end=18673 - _globals['_BLUETOOTHSERVICEDATA']._serialized_start=18675 - _globals['_BLUETOOTHSERVICEDATA']._serialized_end=18754 - _globals['_BLUETOOTHLEADVERTISEMENTRESPONSE']._serialized_start=18757 - _globals['_BLUETOOTHLEADVERTISEMENTRESPONSE']._serialized_end=19011 - _globals['_BLUETOOTHLERAWADVERTISEMENT']._serialized_start=19013 - _globals['_BLUETOOTHLERAWADVERTISEMENT']._serialized_end=19115 - _globals['_BLUETOOTHLERAWADVERTISEMENTSRESPONSE']._serialized_start=19118 - _globals['_BLUETOOTHLERAWADVERTISEMENTSRESPONSE']._serialized_end=19289 - _globals['_BLUETOOTHDEVICEREQUEST']._serialized_start=19292 - _globals['_BLUETOOTHDEVICEREQUEST']._serialized_end=19462 - _globals['_BLUETOOTHDEVICECONNECTIONRESPONSE']._serialized_start=19465 - _globals['_BLUETOOTHDEVICECONNECTIONRESPONSE']._serialized_end=19594 - _globals['_BLUETOOTHGATTGETSERVICESREQUEST']._serialized_start=19596 - _globals['_BLUETOOTHGATTGETSERVICESREQUEST']._serialized_end=19676 - _globals['_BLUETOOTHGATTDESCRIPTOR']._serialized_start=19678 - _globals['_BLUETOOTHGATTDESCRIPTOR']._serialized_end=19763 - _globals['_BLUETOOTHGATTCHARACTERISTIC']._serialized_start=19766 - _globals['_BLUETOOTHGATTCHARACTERISTIC']._serialized_end=19928 - _globals['_BLUETOOTHGATTSERVICE']._serialized_start=19931 - _globals['_BLUETOOTHGATTSERVICE']._serialized_end=20074 - _globals['_BLUETOOTHGATTGETSERVICESRESPONSE']._serialized_start=20076 - _globals['_BLUETOOTHGATTGETSERVICESRESPONSE']._serialized_end=20198 - _globals['_BLUETOOTHGATTGETSERVICESDONERESPONSE']._serialized_start=20200 - _globals['_BLUETOOTHGATTGETSERVICESDONERESPONSE']._serialized_end=20285 - _globals['_BLUETOOTHGATTREADREQUEST']._serialized_start=20287 - _globals['_BLUETOOTHGATTREADREQUEST']._serialized_end=20376 - _globals['_BLUETOOTHGATTREADRESPONSE']._serialized_start=20378 - _globals['_BLUETOOTHGATTREADRESPONSE']._serialized_end=20482 - _globals['_BLUETOOTHGATTWRITEREQUEST']._serialized_start=20485 - _globals['_BLUETOOTHGATTWRITEREQUEST']._serialized_end=20613 - _globals['_BLUETOOTHGATTREADDESCRIPTORREQUEST']._serialized_start=20615 - _globals['_BLUETOOTHGATTREADDESCRIPTORREQUEST']._serialized_end=20714 - _globals['_BLUETOOTHGATTWRITEDESCRIPTORREQUEST']._serialized_start=20716 - _globals['_BLUETOOTHGATTWRITEDESCRIPTORREQUEST']._serialized_end=20836 - _globals['_BLUETOOTHGATTNOTIFYREQUEST']._serialized_start=20838 - _globals['_BLUETOOTHGATTNOTIFYREQUEST']._serialized_end=20945 - _globals['_BLUETOOTHGATTNOTIFYDATARESPONSE']._serialized_start=20947 - _globals['_BLUETOOTHGATTNOTIFYDATARESPONSE']._serialized_end=21057 - _globals['_SUBSCRIBEBLUETOOTHCONNECTIONSFREEREQUEST']._serialized_start=21059 - _globals['_SUBSCRIBEBLUETOOTHCONNECTIONSFREEREQUEST']._serialized_end=21131 - _globals['_BLUETOOTHCONNECTIONSFREERESPONSE']._serialized_start=21134 - _globals['_BLUETOOTHCONNECTIONSFREERESPONSE']._serialized_end=21287 - _globals['_BLUETOOTHGATTERRORRESPONSE']._serialized_start=21289 - _globals['_BLUETOOTHGATTERRORRESPONSE']._serialized_end=21395 - _globals['_BLUETOOTHGATTWRITERESPONSE']._serialized_start=21397 - _globals['_BLUETOOTHGATTWRITERESPONSE']._serialized_end=21488 - _globals['_BLUETOOTHGATTNOTIFYRESPONSE']._serialized_start=21490 - _globals['_BLUETOOTHGATTNOTIFYRESPONSE']._serialized_end=21582 - _globals['_BLUETOOTHDEVICEPAIRINGRESPONSE']._serialized_start=21584 - _globals['_BLUETOOTHDEVICEPAIRINGRESPONSE']._serialized_end=21694 - _globals['_BLUETOOTHDEVICEUNPAIRINGRESPONSE']._serialized_start=21696 - _globals['_BLUETOOTHDEVICEUNPAIRINGRESPONSE']._serialized_end=21809 - _globals['_UNSUBSCRIBEBLUETOOTHLEADVERTISEMENTSREQUEST']._serialized_start=21811 - _globals['_UNSUBSCRIBEBLUETOOTHLEADVERTISEMENTSREQUEST']._serialized_end=21886 - _globals['_BLUETOOTHDEVICECLEARCACHERESPONSE']._serialized_start=21888 - _globals['_BLUETOOTHDEVICECLEARCACHERESPONSE']._serialized_end=22002 - _globals['_BLUETOOTHSCANNERSTATERESPONSE']._serialized_start=22005 - _globals['_BLUETOOTHSCANNERSTATERESPONSE']._serialized_end=22190 - _globals['_BLUETOOTHSCANNERSETMODEREQUEST']._serialized_start=22192 - _globals['_BLUETOOTHSCANNERSETMODEREQUEST']._serialized_end=22291 - _globals['_SUBSCRIBEVOICEASSISTANTREQUEST']._serialized_start=22293 - _globals['_SUBSCRIBEVOICEASSISTANTREQUEST']._serialized_end=22389 - _globals['_VOICEASSISTANTAUDIOSETTINGS']._serialized_start=22391 - _globals['_VOICEASSISTANTAUDIOSETTINGS']._serialized_end=22499 - _globals['_VOICEASSISTANTREQUEST']._serialized_start=22502 - _globals['_VOICEASSISTANTREQUEST']._serialized_end=22690 - _globals['_VOICEASSISTANTRESPONSE']._serialized_start=22692 - _globals['_VOICEASSISTANTRESPONSE']._serialized_end=22775 - _globals['_VOICEASSISTANTEVENTDATA']._serialized_start=22777 - _globals['_VOICEASSISTANTEVENTDATA']._serialized_end=22831 - _globals['_VOICEASSISTANTEVENTRESPONSE']._serialized_start=22834 - _globals['_VOICEASSISTANTEVENTRESPONSE']._serialized_end=22975 - _globals['_VOICEASSISTANTAUDIO']._serialized_start=22977 - _globals['_VOICEASSISTANTAUDIO']._serialized_end=23055 - _globals['_VOICEASSISTANTTIMEREVENTRESPONSE']._serialized_start=23058 - _globals['_VOICEASSISTANTTIMEREVENTRESPONSE']._serialized_end=23265 - _globals['_VOICEASSISTANTANNOUNCEREQUEST']._serialized_start=23268 - _globals['_VOICEASSISTANTANNOUNCEREQUEST']._serialized_end=23419 - _globals['_VOICEASSISTANTANNOUNCEFINISHED']._serialized_start=23421 - _globals['_VOICEASSISTANTANNOUNCEFINISHED']._serialized_end=23500 - _globals['_VOICEASSISTANTWAKEWORD']._serialized_start=23502 - _globals['_VOICEASSISTANTWAKEWORD']._serialized_end=23584 - _globals['_VOICEASSISTANTEXTERNALWAKEWORD']._serialized_start=23587 - _globals['_VOICEASSISTANTEXTERNALWAKEWORD']._serialized_end=23750 - _globals['_VOICEASSISTANTCONFIGURATIONREQUEST']._serialized_start=23753 - _globals['_VOICEASSISTANTCONFIGURATIONREQUEST']._serialized_end=23881 - _globals['_VOICEASSISTANTCONFIGURATIONRESPONSE']._serialized_start=23884 - _globals['_VOICEASSISTANTCONFIGURATIONRESPONSE']._serialized_end=24081 - _globals['_VOICEASSISTANTSETCONFIGURATION']._serialized_start=24083 - _globals['_VOICEASSISTANTSETCONFIGURATION']._serialized_end=24172 - _globals['_LISTENTITIESALARMCONTROLPANELRESPONSE']._serialized_start=24175 - _globals['_LISTENTITIESALARMCONTROLPANELRESPONSE']._serialized_end=24548 - _globals['_ALARMCONTROLPANELSTATERESPONSE']._serialized_start=24551 - _globals['_ALARMCONTROLPANELSTATERESPONSE']._serialized_end=24736 - _globals['_ALARMCONTROLPANELCOMMANDREQUEST']._serialized_start=24739 - _globals['_ALARMCONTROLPANELCOMMANDREQUEST']._serialized_end=24942 - _globals['_LISTENTITIESTEXTRESPONSE']._serialized_start=24945 - _globals['_LISTENTITIESTEXTRESPONSE']._serialized_end=25291 - _globals['_TEXTSTATERESPONSE']._serialized_start=25294 - _globals['_TEXTSTATERESPONSE']._serialized_end=25449 - _globals['_TEXTCOMMANDREQUEST']._serialized_start=25451 - _globals['_TEXTCOMMANDREQUEST']._serialized_end=25578 - _globals['_LISTENTITIESDATERESPONSE']._serialized_start=25581 - _globals['_LISTENTITIESDATERESPONSE']._serialized_end=25854 - _globals['_DATESTATERESPONSE']._serialized_start=25857 - _globals['_DATESTATERESPONSE']._serialized_end=26048 - _globals['_DATECOMMANDREQUEST']._serialized_start=26051 - _globals['_DATECOMMANDREQUEST']._serialized_end=26214 - _globals['_LISTENTITIESTIMERESPONSE']._serialized_start=26217 - _globals['_LISTENTITIESTIMERESPONSE']._serialized_end=26490 - _globals['_TIMESTATERESPONSE']._serialized_start=26493 - _globals['_TIMESTATERESPONSE']._serialized_end=26688 - _globals['_TIMECOMMANDREQUEST']._serialized_start=26691 - _globals['_TIMECOMMANDREQUEST']._serialized_end=26858 - _globals['_LISTENTITIESEVENTRESPONSE']._serialized_start=26861 - _globals['_LISTENTITIESEVENTRESPONSE']._serialized_end=27201 - _globals['_EVENTRESPONSE']._serialized_start=27204 - _globals['_EVENTRESPONSE']._serialized_end=27335 - _globals['_LISTENTITIESVALVERESPONSE']._serialized_start=27338 - _globals['_LISTENTITIESVALVERESPONSE']._serialized_end=27699 - _globals['_VALVESTATERESPONSE']._serialized_start=27702 - _globals['_VALVESTATERESPONSE']._serialized_end=27883 - _globals['_VALVECOMMANDREQUEST']._serialized_start=27886 - _globals['_VALVECOMMANDREQUEST']._serialized_end=28054 - _globals['_LISTENTITIESDATETIMERESPONSE']._serialized_start=28057 - _globals['_LISTENTITIESDATETIMERESPONSE']._serialized_end=28338 - _globals['_DATETIMESTATERESPONSE']._serialized_start=28341 - _globals['_DATETIMESTATERESPONSE']._serialized_end=28521 - _globals['_DATETIMECOMMANDREQUEST']._serialized_start=28524 - _globals['_DATETIMECOMMANDREQUEST']._serialized_end=28676 - _globals['_LISTENTITIESUPDATERESPONSE']._serialized_start=28679 - _globals['_LISTENTITIESUPDATERESPONSE']._serialized_end=28969 - _globals['_UPDATESTATERESPONSE']._serialized_start=28972 - _globals['_UPDATESTATERESPONSE']._serialized_end=29287 - _globals['_UPDATECOMMANDREQUEST']._serialized_start=29290 - _globals['_UPDATECOMMANDREQUEST']._serialized_end=29439 - _globals['_ZWAVEPROXYFRAME']._serialized_start=29441 - _globals['_ZWAVEPROXYFRAME']._serialized_end=29508 - _globals['_ZWAVEPROXYREQUEST']._serialized_start=29510 - _globals['_ZWAVEPROXYREQUEST']._serialized_end=29614 - _globals['_APICONNECTION']._serialized_start=36681 - _globals['_APICONNECTION']._serialized_end=39697 + _globals['_HELLOREQUEST']._serialized_end=132 + _globals['_HELLORESPONSE']._serialized_start=134 + _globals['_HELLORESPONSE']._serialized_end=249 + _globals['_AUTHENTICATIONREQUEST']._serialized_start=251 + _globals['_AUTHENTICATIONREQUEST']._serialized_end=305 + _globals['_AUTHENTICATIONRESPONSE']._serialized_start=307 + _globals['_AUTHENTICATIONRESPONSE']._serialized_end=370 + _globals['_DISCONNECTREQUEST']._serialized_start=372 + _globals['_DISCONNECTREQUEST']._serialized_end=402 + _globals['_DISCONNECTRESPONSE']._serialized_start=404 + _globals['_DISCONNECTRESPONSE']._serialized_end=435 + _globals['_PINGREQUEST']._serialized_start=437 + _globals['_PINGREQUEST']._serialized_end=458 + _globals['_PINGRESPONSE']._serialized_start=460 + _globals['_PINGRESPONSE']._serialized_end=482 + _globals['_DEVICEINFOREQUEST']._serialized_start=484 + _globals['_DEVICEINFOREQUEST']._serialized_end=511 + _globals['_AREAINFO']._serialized_start=513 + _globals['_AREAINFO']._serialized_end=554 + _globals['_DEVICEINFO']._serialized_start=556 + _globals['_DEVICEINFO']._serialized_end=618 + _globals['_DEVICEINFORESPONSE']._serialized_start=621 + _globals['_DEVICEINFORESPONSE']._serialized_end=1676 + _globals['_LISTENTITIESREQUEST']._serialized_start=1678 + _globals['_LISTENTITIESREQUEST']._serialized_end=1707 + _globals['_LISTENTITIESDONERESPONSE']._serialized_start=1709 + _globals['_LISTENTITIESDONERESPONSE']._serialized_end=1746 + _globals['_SUBSCRIBESTATESREQUEST']._serialized_start=1748 + _globals['_SUBSCRIBESTATESREQUEST']._serialized_end=1780 + _globals['_LISTENTITIESBINARYSENSORRESPONSE']._serialized_start=1783 + _globals['_LISTENTITIESBINARYSENSORRESPONSE']._serialized_end=2119 + _globals['_BINARYSENSORSTATERESPONSE']._serialized_start=2122 + _globals['_BINARYSENSORSTATERESPONSE']._serialized_end=2294 + _globals['_LISTENTITIESCOVERRESPONSE']._serialized_start=2297 + _globals['_LISTENTITIESCOVERRESPONSE']._serialized_end=2681 + _globals['_COVERSTATERESPONSE']._serialized_start=2684 + _globals['_COVERSTATERESPONSE']._serialized_end=2924 + _globals['_COVERCOMMANDREQUEST']._serialized_start=2927 + _globals['_COVERCOMMANDREQUEST']._serialized_end=3208 + _globals['_LISTENTITIESFANRESPONSE']._serialized_start=3211 + _globals['_LISTENTITIESFANRESPONSE']._serialized_end=3649 + _globals['_FANSTATERESPONSE']._serialized_start=3652 + _globals['_FANSTATERESPONSE']._serialized_end=3909 + _globals['_FANCOMMANDREQUEST']._serialized_start=3912 + _globals['_FANCOMMANDREQUEST']._serialized_end=4304 + _globals['_LISTENTITIESLIGHTRESPONSE']._serialized_start=4307 + _globals['_LISTENTITIESLIGHTRESPONSE']._serialized_end=4891 + _globals['_LIGHTSTATERESPONSE']._serialized_start=4894 + _globals['_LIGHTSTATERESPONSE']._serialized_end=5246 + _globals['_LIGHTCOMMANDREQUEST']._serialized_start=5249 + _globals['_LIGHTCOMMANDREQUEST']._serialized_end=5934 + _globals['_LISTENTITIESSENSORRESPONSE']._serialized_start=5937 + _globals['_LISTENTITIESSENSORRESPONSE']._serialized_end=6403 + _globals['_SENSORSTATERESPONSE']._serialized_start=6406 + _globals['_SENSORSTATERESPONSE']._serialized_end=6565 + _globals['_LISTENTITIESSWITCHRESPONSE']._serialized_start=6568 + _globals['_LISTENTITIESSWITCHRESPONSE']._serialized_end=6881 + _globals['_SWITCHSTATERESPONSE']._serialized_start=6884 + _globals['_SWITCHSTATERESPONSE']._serialized_end=7020 + _globals['_SWITCHCOMMANDREQUEST']._serialized_start=7023 + _globals['_SWITCHCOMMANDREQUEST']._serialized_end=7154 + _globals['_LISTENTITIESTEXTSENSORRESPONSE']._serialized_start=7157 + _globals['_LISTENTITIESTEXTSENSORRESPONSE']._serialized_end=7456 + _globals['_TEXTSENSORSTATERESPONSE']._serialized_start=7459 + _globals['_TEXTSENSORSTATERESPONSE']._serialized_end=7627 + _globals['_SUBSCRIBELOGSREQUEST']._serialized_start=7629 + _globals['_SUBSCRIBELOGSREQUEST']._serialized_end=7706 + _globals['_SUBSCRIBELOGSRESPONSE']._serialized_start=7708 + _globals['_SUBSCRIBELOGSRESPONSE']._serialized_end=7788 + _globals['_NOISEENCRYPTIONSETKEYREQUEST']._serialized_start=7790 + _globals['_NOISEENCRYPTIONSETKEYREQUEST']._serialized_end=7857 + _globals['_NOISEENCRYPTIONSETKEYRESPONSE']._serialized_start=7859 + _globals['_NOISEENCRYPTIONSETKEYRESPONSE']._serialized_end=7931 + _globals['_SUBSCRIBEHOMEASSISTANTSERVICESREQUEST']._serialized_start=7933 + _globals['_SUBSCRIBEHOMEASSISTANTSERVICESREQUEST']._serialized_end=8013 + _globals['_HOMEASSISTANTSERVICEMAP']._serialized_start=8015 + _globals['_HOMEASSISTANTSERVICEMAP']._serialized_end=8068 + _globals['_HOMEASSISTANTACTIONREQUEST']._serialized_start=8071 + _globals['_HOMEASSISTANTACTIONREQUEST']._serialized_end=8537 + _globals['_HOMEASSISTANTACTIONRESPONSE']._serialized_start=8540 + _globals['_HOMEASSISTANTACTIONRESPONSE']._serialized_end=8750 + _globals['_SUBSCRIBEHOMEASSISTANTSTATESREQUEST']._serialized_start=8752 + _globals['_SUBSCRIBEHOMEASSISTANTSTATESREQUEST']._serialized_end=8828 + _globals['_SUBSCRIBEHOMEASSISTANTSTATERESPONSE']._serialized_start=8831 + _globals['_SUBSCRIBEHOMEASSISTANTSTATERESPONSE']._serialized_end=8959 + _globals['_HOMEASSISTANTSTATERESPONSE']._serialized_start=8961 + _globals['_HOMEASSISTANTSTATERESPONSE']._serialized_end=9084 + _globals['_GETTIMEREQUEST']._serialized_start=9086 + _globals['_GETTIMEREQUEST']._serialized_end=9110 + _globals['_GETTIMERESPONSE']._serialized_start=9112 + _globals['_GETTIMERESPONSE']._serialized_end=9181 + _globals['_LISTENTITIESSERVICESARGUMENT']._serialized_start=9183 + _globals['_LISTENTITIESSERVICESARGUMENT']._serialized_end=9291 + _globals['_LISTENTITIESSERVICESRESPONSE']._serialized_start=9294 + _globals['_LISTENTITIESSERVICESRESPONSE']._serialized_end=9491 + _globals['_EXECUTESERVICEARGUMENT']._serialized_start=9494 + _globals['_EXECUTESERVICEARGUMENT']._serialized_end=9745 + _globals['_EXECUTESERVICEREQUEST']._serialized_start=9748 + _globals['_EXECUTESERVICEREQUEST']._serialized_end=9997 + _globals['_EXECUTESERVICERESPONSE']._serialized_start=10000 + _globals['_EXECUTESERVICERESPONSE']._serialized_end=10207 + _globals['_LISTENTITIESCAMERARESPONSE']._serialized_start=10210 + _globals['_LISTENTITIESCAMERARESPONSE']._serialized_end=10478 + _globals['_CAMERAIMAGERESPONSE']._serialized_start=10481 + _globals['_CAMERAIMAGERESPONSE']._serialized_end=10627 + _globals['_CAMERAIMAGEREQUEST']._serialized_start=10629 + _globals['_CAMERAIMAGEREQUEST']._serialized_end=10705 + _globals['_LISTENTITIESCLIMATERESPONSE']._serialized_start=10708 + _globals['_LISTENTITIESCLIMATERESPONSE']._serialized_end=11857 + _globals['_CLIMATESTATERESPONSE']._serialized_start=11860 + _globals['_CLIMATESTATERESPONSE']._serialized_end=12402 + _globals['_CLIMATECOMMANDREQUEST']._serialized_start=12405 + _globals['_CLIMATECOMMANDREQUEST']._serialized_end=13165 + _globals['_LISTENTITIESWATERHEATERRESPONSE']._serialized_start=13168 + _globals['_LISTENTITIESWATERHEATERRESPONSE']._serialized_end=13635 + _globals['_WATERHEATERSTATERESPONSE']._serialized_start=13638 + _globals['_WATERHEATERSTATERESPONSE']._serialized_end=13940 + _globals['_WATERHEATERCOMMANDREQUEST']._serialized_start=13943 + _globals['_WATERHEATERCOMMANDREQUEST']._serialized_end=14231 + _globals['_LISTENTITIESNUMBERRESPONSE']._serialized_start=14234 + _globals['_LISTENTITIESNUMBERRESPONSE']._serialized_end=14632 + _globals['_NUMBERSTATERESPONSE']._serialized_start=14635 + _globals['_NUMBERSTATERESPONSE']._serialized_end=14794 + _globals['_NUMBERCOMMANDREQUEST']._serialized_start=14797 + _globals['_NUMBERCOMMANDREQUEST']._serialized_end=14928 + _globals['_LISTENTITIESSELECTRESPONSE']._serialized_start=14931 + _globals['_LISTENTITIESSELECTRESPONSE']._serialized_end=15247 + _globals['_SELECTSTATERESPONSE']._serialized_start=15250 + _globals['_SELECTSTATERESPONSE']._serialized_end=15409 + _globals['_SELECTCOMMANDREQUEST']._serialized_start=15412 + _globals['_SELECTCOMMANDREQUEST']._serialized_end=15543 + _globals['_LISTENTITIESSIRENRESPONSE']._serialized_start=15546 + _globals['_LISTENTITIESSIRENRESPONSE']._serialized_end=15910 + _globals['_SIRENSTATERESPONSE']._serialized_start=15913 + _globals['_SIRENSTATERESPONSE']._serialized_end=16047 + _globals['_SIRENCOMMANDREQUEST']._serialized_start=16050 + _globals['_SIRENCOMMANDREQUEST']._serialized_end=16306 + _globals['_LISTENTITIESLOCKRESPONSE']._serialized_start=16309 + _globals['_LISTENTITIESLOCKRESPONSE']._serialized_end=16663 + _globals['_LOCKSTATERESPONSE']._serialized_start=16666 + _globals['_LOCKSTATERESPONSE']._serialized_end=16810 + _globals['_LOCKCOMMANDREQUEST']._serialized_start=16813 + _globals['_LOCKCOMMANDREQUEST']._serialized_end=16988 + _globals['_LISTENTITIESBUTTONRESPONSE']._serialized_start=16991 + _globals['_LISTENTITIESBUTTONRESPONSE']._serialized_end=17281 + _globals['_BUTTONCOMMANDREQUEST']._serialized_start=17283 + _globals['_BUTTONCOMMANDREQUEST']._serialized_end=17399 + _globals['_MEDIAPLAYERSUPPORTEDFORMAT']._serialized_start=17402 + _globals['_MEDIAPLAYERSUPPORTEDFORMAT']._serialized_end=17576 + _globals['_LISTENTITIESMEDIAPLAYERRESPONSE']._serialized_start=17579 + _globals['_LISTENTITIESMEDIAPLAYERRESPONSE']._serialized_end=17961 + _globals['_MEDIAPLAYERSTATERESPONSE']._serialized_start=17964 + _globals['_MEDIAPLAYERSTATERESPONSE']._serialized_end=18161 + _globals['_MEDIAPLAYERCOMMANDREQUEST']._serialized_start=18164 + _globals['_MEDIAPLAYERCOMMANDREQUEST']._serialized_end=18476 + _globals['_SUBSCRIBEBLUETOOTHLEADVERTISEMENTSREQUEST']._serialized_start=18478 + _globals['_SUBSCRIBEBLUETOOTHLEADVERTISEMENTSREQUEST']._serialized_end=18566 + _globals['_BLUETOOTHSERVICEDATA']._serialized_start=18568 + _globals['_BLUETOOTHSERVICEDATA']._serialized_end=18647 + _globals['_BLUETOOTHLEADVERTISEMENTRESPONSE']._serialized_start=18650 + _globals['_BLUETOOTHLEADVERTISEMENTRESPONSE']._serialized_end=18904 + _globals['_BLUETOOTHLERAWADVERTISEMENT']._serialized_start=18906 + _globals['_BLUETOOTHLERAWADVERTISEMENT']._serialized_end=19008 + _globals['_BLUETOOTHLERAWADVERTISEMENTSRESPONSE']._serialized_start=19011 + _globals['_BLUETOOTHLERAWADVERTISEMENTSRESPONSE']._serialized_end=19182 + _globals['_BLUETOOTHDEVICEREQUEST']._serialized_start=19185 + _globals['_BLUETOOTHDEVICEREQUEST']._serialized_end=19355 + _globals['_BLUETOOTHDEVICECONNECTIONRESPONSE']._serialized_start=19358 + _globals['_BLUETOOTHDEVICECONNECTIONRESPONSE']._serialized_end=19487 + _globals['_BLUETOOTHGATTGETSERVICESREQUEST']._serialized_start=19489 + _globals['_BLUETOOTHGATTGETSERVICESREQUEST']._serialized_end=19569 + _globals['_BLUETOOTHGATTDESCRIPTOR']._serialized_start=19571 + _globals['_BLUETOOTHGATTDESCRIPTOR']._serialized_end=19656 + _globals['_BLUETOOTHGATTCHARACTERISTIC']._serialized_start=19659 + _globals['_BLUETOOTHGATTCHARACTERISTIC']._serialized_end=19821 + _globals['_BLUETOOTHGATTSERVICE']._serialized_start=19824 + _globals['_BLUETOOTHGATTSERVICE']._serialized_end=19967 + _globals['_BLUETOOTHGATTGETSERVICESRESPONSE']._serialized_start=19969 + _globals['_BLUETOOTHGATTGETSERVICESRESPONSE']._serialized_end=20091 + _globals['_BLUETOOTHGATTGETSERVICESDONERESPONSE']._serialized_start=20093 + _globals['_BLUETOOTHGATTGETSERVICESDONERESPONSE']._serialized_end=20178 + _globals['_BLUETOOTHGATTREADREQUEST']._serialized_start=20180 + _globals['_BLUETOOTHGATTREADREQUEST']._serialized_end=20269 + _globals['_BLUETOOTHGATTREADRESPONSE']._serialized_start=20271 + _globals['_BLUETOOTHGATTREADRESPONSE']._serialized_end=20375 + _globals['_BLUETOOTHGATTWRITEREQUEST']._serialized_start=20377 + _globals['_BLUETOOTHGATTWRITEREQUEST']._serialized_end=20499 + _globals['_BLUETOOTHGATTREADDESCRIPTORREQUEST']._serialized_start=20501 + _globals['_BLUETOOTHGATTREADDESCRIPTORREQUEST']._serialized_end=20600 + _globals['_BLUETOOTHGATTWRITEDESCRIPTORREQUEST']._serialized_start=20602 + _globals['_BLUETOOTHGATTWRITEDESCRIPTORREQUEST']._serialized_end=20716 + _globals['_BLUETOOTHGATTNOTIFYREQUEST']._serialized_start=20718 + _globals['_BLUETOOTHGATTNOTIFYREQUEST']._serialized_end=20825 + _globals['_BLUETOOTHGATTNOTIFYDATARESPONSE']._serialized_start=20827 + _globals['_BLUETOOTHGATTNOTIFYDATARESPONSE']._serialized_end=20937 + _globals['_SUBSCRIBEBLUETOOTHCONNECTIONSFREEREQUEST']._serialized_start=20939 + _globals['_SUBSCRIBEBLUETOOTHCONNECTIONSFREEREQUEST']._serialized_end=21011 + _globals['_BLUETOOTHCONNECTIONSFREERESPONSE']._serialized_start=21014 + _globals['_BLUETOOTHCONNECTIONSFREERESPONSE']._serialized_end=21167 + _globals['_BLUETOOTHGATTERRORRESPONSE']._serialized_start=21169 + _globals['_BLUETOOTHGATTERRORRESPONSE']._serialized_end=21275 + _globals['_BLUETOOTHGATTWRITERESPONSE']._serialized_start=21277 + _globals['_BLUETOOTHGATTWRITERESPONSE']._serialized_end=21368 + _globals['_BLUETOOTHGATTNOTIFYRESPONSE']._serialized_start=21370 + _globals['_BLUETOOTHGATTNOTIFYRESPONSE']._serialized_end=21462 + _globals['_BLUETOOTHDEVICEPAIRINGRESPONSE']._serialized_start=21464 + _globals['_BLUETOOTHDEVICEPAIRINGRESPONSE']._serialized_end=21574 + _globals['_BLUETOOTHDEVICEUNPAIRINGRESPONSE']._serialized_start=21576 + _globals['_BLUETOOTHDEVICEUNPAIRINGRESPONSE']._serialized_end=21689 + _globals['_UNSUBSCRIBEBLUETOOTHLEADVERTISEMENTSREQUEST']._serialized_start=21691 + _globals['_UNSUBSCRIBEBLUETOOTHLEADVERTISEMENTSREQUEST']._serialized_end=21766 + _globals['_BLUETOOTHDEVICECLEARCACHERESPONSE']._serialized_start=21768 + _globals['_BLUETOOTHDEVICECLEARCACHERESPONSE']._serialized_end=21882 + _globals['_BLUETOOTHSCANNERSTATERESPONSE']._serialized_start=21885 + _globals['_BLUETOOTHSCANNERSTATERESPONSE']._serialized_end=22070 + _globals['_BLUETOOTHSCANNERSETMODEREQUEST']._serialized_start=22072 + _globals['_BLUETOOTHSCANNERSETMODEREQUEST']._serialized_end=22171 + _globals['_SUBSCRIBEVOICEASSISTANTREQUEST']._serialized_start=22173 + _globals['_SUBSCRIBEVOICEASSISTANTREQUEST']._serialized_end=22269 + _globals['_VOICEASSISTANTAUDIOSETTINGS']._serialized_start=22271 + _globals['_VOICEASSISTANTAUDIOSETTINGS']._serialized_end=22379 + _globals['_VOICEASSISTANTREQUEST']._serialized_start=22382 + _globals['_VOICEASSISTANTREQUEST']._serialized_end=22570 + _globals['_VOICEASSISTANTRESPONSE']._serialized_start=22572 + _globals['_VOICEASSISTANTRESPONSE']._serialized_end=22655 + _globals['_VOICEASSISTANTEVENTDATA']._serialized_start=22657 + _globals['_VOICEASSISTANTEVENTDATA']._serialized_end=22711 + _globals['_VOICEASSISTANTEVENTRESPONSE']._serialized_start=22714 + _globals['_VOICEASSISTANTEVENTRESPONSE']._serialized_end=22855 + _globals['_VOICEASSISTANTAUDIO']._serialized_start=22857 + _globals['_VOICEASSISTANTAUDIO']._serialized_end=22941 + _globals['_VOICEASSISTANTTIMEREVENTRESPONSE']._serialized_start=22944 + _globals['_VOICEASSISTANTTIMEREVENTRESPONSE']._serialized_end=23151 + _globals['_VOICEASSISTANTANNOUNCEREQUEST']._serialized_start=23154 + _globals['_VOICEASSISTANTANNOUNCEREQUEST']._serialized_end=23305 + _globals['_VOICEASSISTANTANNOUNCEFINISHED']._serialized_start=23307 + _globals['_VOICEASSISTANTANNOUNCEFINISHED']._serialized_end=23386 + _globals['_VOICEASSISTANTWAKEWORD']._serialized_start=23388 + _globals['_VOICEASSISTANTWAKEWORD']._serialized_end=23470 + _globals['_VOICEASSISTANTEXTERNALWAKEWORD']._serialized_start=23473 + _globals['_VOICEASSISTANTEXTERNALWAKEWORD']._serialized_end=23636 + _globals['_VOICEASSISTANTCONFIGURATIONREQUEST']._serialized_start=23639 + _globals['_VOICEASSISTANTCONFIGURATIONREQUEST']._serialized_end=23767 + _globals['_VOICEASSISTANTCONFIGURATIONRESPONSE']._serialized_start=23770 + _globals['_VOICEASSISTANTCONFIGURATIONRESPONSE']._serialized_end=23967 + _globals['_VOICEASSISTANTSETCONFIGURATION']._serialized_start=23969 + _globals['_VOICEASSISTANTSETCONFIGURATION']._serialized_end=24058 + _globals['_LISTENTITIESALARMCONTROLPANELRESPONSE']._serialized_start=24061 + _globals['_LISTENTITIESALARMCONTROLPANELRESPONSE']._serialized_end=24434 + _globals['_ALARMCONTROLPANELSTATERESPONSE']._serialized_start=24437 + _globals['_ALARMCONTROLPANELSTATERESPONSE']._serialized_end=24622 + _globals['_ALARMCONTROLPANELCOMMANDREQUEST']._serialized_start=24625 + _globals['_ALARMCONTROLPANELCOMMANDREQUEST']._serialized_end=24828 + _globals['_LISTENTITIESTEXTRESPONSE']._serialized_start=24831 + _globals['_LISTENTITIESTEXTRESPONSE']._serialized_end=25177 + _globals['_TEXTSTATERESPONSE']._serialized_start=25180 + _globals['_TEXTSTATERESPONSE']._serialized_end=25335 + _globals['_TEXTCOMMANDREQUEST']._serialized_start=25337 + _globals['_TEXTCOMMANDREQUEST']._serialized_end=25464 + _globals['_LISTENTITIESDATERESPONSE']._serialized_start=25467 + _globals['_LISTENTITIESDATERESPONSE']._serialized_end=25740 + _globals['_DATESTATERESPONSE']._serialized_start=25743 + _globals['_DATESTATERESPONSE']._serialized_end=25934 + _globals['_DATECOMMANDREQUEST']._serialized_start=25937 + _globals['_DATECOMMANDREQUEST']._serialized_end=26100 + _globals['_LISTENTITIESTIMERESPONSE']._serialized_start=26103 + _globals['_LISTENTITIESTIMERESPONSE']._serialized_end=26376 + _globals['_TIMESTATERESPONSE']._serialized_start=26379 + _globals['_TIMESTATERESPONSE']._serialized_end=26574 + _globals['_TIMECOMMANDREQUEST']._serialized_start=26577 + _globals['_TIMECOMMANDREQUEST']._serialized_end=26744 + _globals['_LISTENTITIESEVENTRESPONSE']._serialized_start=26747 + _globals['_LISTENTITIESEVENTRESPONSE']._serialized_end=27087 + _globals['_EVENTRESPONSE']._serialized_start=27090 + _globals['_EVENTRESPONSE']._serialized_end=27221 + _globals['_LISTENTITIESVALVERESPONSE']._serialized_start=27224 + _globals['_LISTENTITIESVALVERESPONSE']._serialized_end=27585 + _globals['_VALVESTATERESPONSE']._serialized_start=27588 + _globals['_VALVESTATERESPONSE']._serialized_end=27769 + _globals['_VALVECOMMANDREQUEST']._serialized_start=27772 + _globals['_VALVECOMMANDREQUEST']._serialized_end=27940 + _globals['_LISTENTITIESDATETIMERESPONSE']._serialized_start=27943 + _globals['_LISTENTITIESDATETIMERESPONSE']._serialized_end=28224 + _globals['_DATETIMESTATERESPONSE']._serialized_start=28227 + _globals['_DATETIMESTATERESPONSE']._serialized_end=28407 + _globals['_DATETIMECOMMANDREQUEST']._serialized_start=28410 + _globals['_DATETIMECOMMANDREQUEST']._serialized_end=28562 + _globals['_LISTENTITIESUPDATERESPONSE']._serialized_start=28565 + _globals['_LISTENTITIESUPDATERESPONSE']._serialized_end=28855 + _globals['_UPDATESTATERESPONSE']._serialized_start=28858 + _globals['_UPDATESTATERESPONSE']._serialized_end=29173 + _globals['_UPDATECOMMANDREQUEST']._serialized_start=29176 + _globals['_UPDATECOMMANDREQUEST']._serialized_end=29325 + _globals['_ZWAVEPROXYFRAME']._serialized_start=29327 + _globals['_ZWAVEPROXYFRAME']._serialized_end=29388 + _globals['_ZWAVEPROXYREQUEST']._serialized_start=29390 + _globals['_ZWAVEPROXYREQUEST']._serialized_end=29488 + _globals['_LISTENTITIESINFRAREDRESPONSE']._serialized_start=29491 + _globals['_LISTENTITIESINFRAREDRESPONSE']._serialized_end=29780 + _globals['_INFRAREDRFTRANSMITRAWTIMINGSREQUEST']._serialized_start=29783 + _globals['_INFRAREDRFTRANSMITRAWTIMINGSREQUEST']._serialized_end=29963 + _globals['_INFRAREDRFRECEIVEEVENT']._serialized_start=29966 + _globals['_INFRAREDRFRECEIVEEVENT']._serialized_end=30107 + _globals['_APICONNECTION']._serialized_start=37258 + _globals['_APICONNECTION']._serialized_end=40284 # @@protoc_insertion_point(module_scope) diff --git a/aioesphomeapi/client.py b/aioesphomeapi/client.py index 2da3c9127..cada78872 100644 --- a/aioesphomeapi/client.py +++ b/aioesphomeapi/client.py @@ -50,6 +50,8 @@ HomeassistantActionRequest, HomeassistantActionResponse, HomeAssistantStateResponse, + InfraredRFReceiveEvent, + InfraredRFTransmitRawTimingsRequest, LightCommandRequest, ListEntitiesDoneResponse, ListEntitiesRequest, @@ -101,6 +103,7 @@ on_bluetooth_message_types, on_bluetooth_scanner_state_response, on_home_assistant_action_request, + on_infrared_rf_receive_event, on_state_msg, on_subscribe_home_assistant_state_response, on_zwave_proxy_request_message, @@ -140,6 +143,7 @@ FanDirection, FanSpeed, HomeassistantServiceCall, + InfraredRFReceiveEvent as InfraredRFReceiveEventModel, LegacyCoverCommand, LockCommand, LogLevel, @@ -463,6 +467,36 @@ def subscribe_zwave_proxy_request( (ZWaveProxyRequest,), ) + def subscribe_infrared_rf_receive( + self, + on_infrared_rf_receive: Callable[[InfraredRFReceiveEventModel], None], + ) -> Callable[[], None]: + """Subscribe to Infrared/RF Receive Event messages.""" + return self._get_connection().add_message_callback( + partial( + on_infrared_rf_receive_event, + on_infrared_rf_receive, + ), + (InfraredRFReceiveEvent,), + ) + + def infrared_rf_transmit_raw_timings( + self, + key: int, + carrier_frequency: int, + timings: list[int], + repeat_count: int = 1, + device_id: int = 0, + ) -> None: + """Send an infrared/RF raw timings transmit request.""" + req = InfraredRFTransmitRawTimingsRequest() + req.device_id = device_id + req.key = key + req.carrier_frequency = carrier_frequency + req.repeat_count = repeat_count + req.timings.extend(timings) + self._get_connection().send_message(req) + async def _send_bluetooth_message_await_response( self, address: int, @@ -591,6 +625,14 @@ async def bluetooth_device_connect( # pylint: disable=too-many-locals, too-many if self._debug_enabled: _LOGGER.debug("%s: Using connection version %s", address, request_type) + def on_bluetooth_connection_state_with_notify_cleanup( + connected: bool, mtu: int, error: int + ) -> None: + """Wrap connection state callback to clean up notify callbacks on disconnect.""" + if not connected: + self.bluetooth_gatt_stop_notify_for_address(address) + on_bluetooth_connection_state(connected, mtu, error) + unsub = self._get_connection().send_message_callback_response( BluetoothDeviceRequest( address=address, @@ -602,7 +644,7 @@ async def bluetooth_device_connect( # pylint: disable=too-many-locals, too-many on_bluetooth_device_connection_response, connect_future, address, - on_bluetooth_connection_state, + on_bluetooth_connection_state_with_notify_cleanup, ), (BluetoothDeviceConnectionResponse,), ) @@ -953,17 +995,44 @@ async def bluetooth_gatt_start_notify( remove_callback() raise + key = (address, handle) + self._notify_callbacks[key] = remove_callback + async def stop_notify() -> None: - if self._connection is None: - return + self.bluetooth_gatt_stop_notify(address, handle) + + def wrapped_remove_callback() -> None: + self._notify_callbacks.pop(key, None) + remove_callback() + + return stop_notify, wrapped_remove_callback + + def bluetooth_gatt_stop_notify(self, address: int, handle: int) -> None: + """Stop a notify session for a GATT characteristic. + This is a synchronous method that can be safely called from + exception handlers without awaiting. + """ + key = (address, handle) + if remove_callback := self._notify_callbacks.pop(key, None): remove_callback() + if self._connection is not None: self._connection.send_message( BluetoothGATTNotifyRequest(address=address, handle=handle, enable=False) ) - return stop_notify, remove_callback + def bluetooth_gatt_stop_notify_for_address(self, address: int) -> None: + """Stop all notify sessions for a Bluetooth device. + + This is a synchronous method that removes all notify callbacks + for a given address. It does not send disable messages since + this is typically called when the device has disconnected. + """ + keys_to_remove = [key for key in self._notify_callbacks if key[0] == address] + for key in keys_to_remove: + if remove_callback := self._notify_callbacks.pop(key, None): + remove_callback() def subscribe_home_assistant_states( self, @@ -1336,14 +1405,19 @@ def water_heater_command( req.has_fields |= WaterHeaterCommandField.TARGET_TEMPERATURE req.target_temperature = target_temperature - if away is not None or on is not None: - req.has_fields |= WaterHeaterCommandField.STATE - state = WaterHeaterStateFlag(0) + # Use the new granular AWAY_STATE/ON_STATE fields instead of the + # deprecated combined STATE field. Water heater support only shipped + # in HA 2026.2.0/ESPHome 2026.1.0 so early adopters can update + # their devices; no need for legacy STATE backward compat. + if away is not None: + req.has_fields |= WaterHeaterCommandField.AWAY_STATE if away: - state |= WaterHeaterStateFlag.AWAY + req.state |= WaterHeaterStateFlag.AWAY + + if on is not None: + req.has_fields |= WaterHeaterCommandField.ON_STATE if on: - state |= WaterHeaterStateFlag.ON - req.state = state + req.state |= WaterHeaterStateFlag.ON if target_temperature_low is not None: req.has_fields |= WaterHeaterCommandField.TARGET_TEMPERATURE_LOW diff --git a/aioesphomeapi/client_base.pxd b/aioesphomeapi/client_base.pxd index da1028d66..f73566d97 100644 --- a/aioesphomeapi/client_base.pxd +++ b/aioesphomeapi/client_base.pxd @@ -31,6 +31,7 @@ cdef class APIClientBase: cdef public APIConnection _connection cdef public bint _debug_enabled cdef public object _loop + cdef public dict _notify_callbacks cdef public ConnectionParams _params cdef public str cached_name cdef public str log_name diff --git a/aioesphomeapi/client_base.py b/aioesphomeapi/client_base.py index faa901c0a..905bff3bc 100644 --- a/aioesphomeapi/client_base.py +++ b/aioesphomeapi/client_base.py @@ -26,6 +26,7 @@ BluetoothScannerStateResponse, CameraImageResponse, HomeassistantActionRequest, + InfraredRFReceiveEvent, SubscribeHomeAssistantStateResponse, ZWaveProxyRequest, ) @@ -39,6 +40,7 @@ DeviceInfo, EntityState, HomeassistantServiceCall, + InfraredRFReceiveEvent as InfraredRFReceiveEventModel, ZWaveProxyRequest as ZWaveProxyRequestModel, ) from .model_conversions import SUBSCRIBE_STATES_RESPONSE_TYPES @@ -202,6 +204,13 @@ def on_zwave_proxy_request_message( on_zwave_proxy_request(ZWaveProxyRequestModel.from_pb(msg)) +def on_infrared_rf_receive_event( + on_infrared_rf_receive: Callable[[InfraredRFReceiveEventModel], None], + msg: InfraredRFReceiveEvent, +) -> None: + on_infrared_rf_receive(InfraredRFReceiveEventModel.from_pb(msg)) + + str_ = str @@ -225,6 +234,7 @@ class APIClientBase: "_connection", "_debug_enabled", "_loop", + "_notify_callbacks", "_params", "cached_name", "log_name", @@ -290,6 +300,7 @@ def __init__( self._cached_device_info: DeviceInfo | None = None self.cached_name: str | None = None self._background_tasks: set[asyncio.Task[Any]] = set() + self._notify_callbacks: dict[tuple[int, int], Callable[[], None]] = {} self._loop = asyncio.get_running_loop() self._call_id_counter = itertools.count(1) self._set_log_name() diff --git a/aioesphomeapi/connection.py b/aioesphomeapi/connection.py index 0ed921a46..396178510 100644 --- a/aioesphomeapi/connection.py +++ b/aioesphomeapi/connection.py @@ -487,8 +487,10 @@ async def _connect_hello_login(self, login: bool) -> None: responses = await self.send_messages_await_response_complex( tuple(messages), None, - lambda resp: type(resp) # pylint: disable=unidiomatic-typecheck - is HelloResponse, # Only wait for HelloResponse + lambda resp: ( + type(resp) # pylint: disable=unidiomatic-typecheck + is HelloResponse + ), # Only wait for HelloResponse tuple(msg_types), CONNECT_REQUEST_TIMEOUT, ) diff --git a/aioesphomeapi/core.py b/aioesphomeapi/core.py index 29ceaf207..09778a813 100644 --- a/aioesphomeapi/core.py +++ b/aioesphomeapi/core.py @@ -61,6 +61,8 @@ HomeassistantActionRequest, HomeassistantActionResponse, HomeAssistantStateResponse, + InfraredRFReceiveEvent, + InfraredRFTransmitRawTimingsRequest, LightCommandRequest, LightStateResponse, ListEntitiesAlarmControlPanelResponse, @@ -74,6 +76,7 @@ ListEntitiesDoneResponse, ListEntitiesEventResponse, ListEntitiesFanResponse, + ListEntitiesInfraredResponse, ListEntitiesLightResponse, ListEntitiesLockResponse, ListEntitiesMediaPlayerResponse, @@ -89,6 +92,7 @@ ListEntitiesTimeResponse, ListEntitiesUpdateResponse, ListEntitiesValveResponse, + ListEntitiesWaterHeaterResponse, LockCommandRequest, LockStateResponse, MediaPlayerCommandRequest, @@ -135,6 +139,8 @@ VoiceAssistantResponse, VoiceAssistantSetConfiguration, VoiceAssistantTimerEventResponse, + WaterHeaterCommandRequest, + WaterHeaterStateResponse, ZWaveProxyFrame, ZWaveProxyRequest, ) @@ -493,6 +499,12 @@ def __init__(self, error: BluetoothGATTError) -> None: 129: ZWaveProxyRequest, 130: HomeassistantActionResponse, 131: ExecuteServiceResponse, + 132: ListEntitiesWaterHeaterResponse, + 133: WaterHeaterStateResponse, + 134: WaterHeaterCommandRequest, + 135: ListEntitiesInfraredResponse, + 136: InfraredRFTransmitRawTimingsRequest, + 137: InfraredRFReceiveEvent, } MESSAGE_NUMBER_TO_PROTO = tuple(MESSAGE_TYPE_TO_PROTO.values()) diff --git a/aioesphomeapi/model.py b/aioesphomeapi/model.py index 78ceb13a6..3497cb60a 100644 --- a/aioesphomeapi/model.py +++ b/aioesphomeapi/model.py @@ -155,6 +155,18 @@ class ZWaveProxyRequest(APIModelBase): data: bytes = field(default_factory=bytes) # pylint: disable=invalid-field-call +class InfraredCapability(enum.IntFlag): + TRANSMITTER = 1 << 0 + RECEIVER = 1 << 1 + + +@_frozen_dataclass_decorator +class InfraredRFReceiveEvent(APIModelBase): + device_id: int = 0 + key: int = 0 + timings: list[int] = field(default_factory=list) # pylint: disable=invalid-field-call + + class VoiceAssistantSubscriptionFlag(enum.IntFlag): API_AUDIO = 1 << 2 @@ -1097,6 +1109,16 @@ class WaterHeaterMode(APIIntEnum): GAS = 6 +class WaterHeaterFeature(enum.IntFlag): + """ESPHome water heater feature flags (WaterHeaterFeature).""" + + SUPPORTS_CURRENT_TEMPERATURE = 1 << 0 + SUPPORTS_TARGET_TEMPERATURE = 1 << 1 + SUPPORTS_OPERATION_MODE = 1 << 2 + SUPPORTS_AWAY_MODE = 1 << 3 + SUPPORTS_ON_OFF = 1 << 4 + + class WaterHeaterCommandField(enum.IntFlag): """Bitmask for has_fields in WaterHeaterCommandRequest.""" @@ -1105,6 +1127,8 @@ class WaterHeaterCommandField(enum.IntFlag): STATE = 1 << 2 TARGET_TEMPERATURE_LOW = 1 << 3 TARGET_TEMPERATURE_HIGH = 1 << 4 + ON_STATE = 1 << 5 + AWAY_STATE = 1 << 6 class WaterHeaterStateFlag(enum.IntFlag): @@ -1203,6 +1227,14 @@ class UpdateState(EntityState): release_url: str = "" +# ==================== INFRARED ==================== + + +@_frozen_dataclass_decorator +class InfraredInfo(EntityInfo): + capabilities: int = 0 + + # ==================== INFO MAP ==================== COMPONENT_TYPE_TO_INFO: dict[str, type[EntityInfo]] = { @@ -1229,6 +1261,7 @@ class UpdateState(EntityState): "valve": ValveInfo, "event": EventInfo, "update": UpdateInfo, + "infrared": InfraredInfo, } @@ -1821,6 +1854,7 @@ class VoiceAssistantTimerEventType(APIIntEnum): EventInfo: "event", UpdateInfo: "update", WaterHeaterInfo: "water_heater", + InfraredInfo: "infrared", } diff --git a/aioesphomeapi/model_conversions.py b/aioesphomeapi/model_conversions.py index 1d45b2b73..1f6700623 100644 --- a/aioesphomeapi/model_conversions.py +++ b/aioesphomeapi/model_conversions.py @@ -22,6 +22,7 @@ ListEntitiesDateTimeResponse, ListEntitiesEventResponse, ListEntitiesFanResponse, + ListEntitiesInfraredResponse, ListEntitiesLightResponse, ListEntitiesLockResponse, ListEntitiesMediaPlayerResponse, @@ -72,6 +73,7 @@ EventInfo, FanInfo, FanState, + InfraredInfo, LightInfo, LightState, LockEntityState, @@ -138,6 +140,7 @@ ListEntitiesDateTimeResponse: DateTimeInfo, ListEntitiesEventResponse: EventInfo, ListEntitiesFanResponse: FanInfo, + ListEntitiesInfraredResponse: InfraredInfo, ListEntitiesLightResponse: LightInfo, ListEntitiesLockResponse: LockInfo, ListEntitiesMediaPlayerResponse: MediaPlayerInfo, diff --git a/requirements/test.txt b/requirements/test.txt index 5c6e9a905..44d253ccd 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,11 +1,11 @@ pylint==4.0.4 -ruff==0.14.10 +ruff==0.15.1 flake8==7.3.0 isort==7.0.0 mypy==1.19.1 types-protobuf==6.32.1.20251210 pytest>=6.2.4,<10 pytest-asyncio==1.3.0 -pytest-codspeed==4.2.0 +pytest-codspeed==4.3.0 pytest-cov>=4.1.0 pytest-timeout==2.4.0 diff --git a/setup.py b/setup.py index 53b21b832..a9d17db87 100644 --- a/setup.py +++ b/setup.py @@ -41,7 +41,7 @@ long_description = readme_file.read() -VERSION = "43.9.1" +VERSION = "44.1.0" PROJECT_NAME = "aioesphomeapi" PROJECT_PACKAGE_NAME = "aioesphomeapi" PROJECT_LICENSE = "MIT" diff --git a/tests/test_client.py b/tests/test_client.py index ab986512c..ad2e8fbc2 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -57,6 +57,8 @@ HomeassistantActionRequest, HomeassistantActionResponse, HomeAssistantStateResponse, + InfraredRFReceiveEvent as InfraredRFReceiveEventPb, + InfraredRFTransmitRawTimingsRequest as InfraredRFTransmitRawTimingsRequestPb, LightCommandRequest, ListEntitiesBinarySensorResponse, ListEntitiesDoneResponse, @@ -127,6 +129,7 @@ FanSpeed, HomeassistantActionResponse as HomeassistantActionResponseModel, HomeassistantServiceCall, + InfraredRFReceiveEvent, LegacyCoverCommand, LightColorCapability, LockCommand, @@ -757,7 +760,7 @@ async def test_switch_command( { "key": 1, "device_id": 0, - "has_fields": WaterHeaterCommandField.STATE, + "has_fields": WaterHeaterCommandField.AWAY_STATE, "state": WaterHeaterStateFlag.AWAY, }, ), @@ -766,7 +769,7 @@ async def test_switch_command( { "key": 1, "device_id": 0, - "has_fields": WaterHeaterCommandField.STATE, + "has_fields": WaterHeaterCommandField.ON_STATE, "state": WaterHeaterStateFlag.ON, }, ), @@ -775,7 +778,8 @@ async def test_switch_command( { "key": 1, "device_id": 0, - "has_fields": WaterHeaterCommandField.STATE, + "has_fields": WaterHeaterCommandField.AWAY_STATE + | WaterHeaterCommandField.ON_STATE, "state": WaterHeaterStateFlag.AWAY | WaterHeaterStateFlag.ON, }, ), @@ -784,7 +788,8 @@ async def test_switch_command( { "key": 1, "device_id": 0, - "has_fields": WaterHeaterCommandField.STATE, + "has_fields": WaterHeaterCommandField.AWAY_STATE + | WaterHeaterCommandField.ON_STATE, "state": WaterHeaterStateFlag(0), }, ), @@ -2128,6 +2133,227 @@ def on_bluetooth_gatt_notify(handle: int, data: bytearray) -> None: assert connection.is_connected +async def test_bluetooth_gatt_stop_notify( + api_client: tuple[ + APIClient, APIConnection, asyncio.Transport, APIPlaintextFrameHelper + ], +) -> None: + """Test bluetooth_gatt_stop_notify stops notify and removes callback.""" + client, connection, _transport, protocol = api_client + notifies = [] + + handlers_before = len(list(itertools.chain(*connection._message_handlers.values()))) + + def on_bluetooth_gatt_notify(handle: int, data: bytearray) -> None: + notifies.append((handle, data)) + + notify_task = asyncio.create_task( + client.bluetooth_gatt_start_notify(1234, 1, on_bluetooth_gatt_notify) + ) + await asyncio.sleep(0) + notify_response: message.Message = BluetoothGATTNotifyResponse( + address=1234, handle=1 + ) + mock_data_received(protocol, generate_plaintext_packet(notify_response)) + + await notify_task + + # Verify the callback is registered + assert (1234, 1) in client._notify_callbacks + + # Stop notify using the sync method + client.bluetooth_gatt_stop_notify(1234, 1) + + # Verify callback is removed + assert (1234, 1) not in client._notify_callbacks + + # Verify handlers are cleaned up + assert ( + len(list(itertools.chain(*connection._message_handlers.values()))) + == handlers_before + ) + + +async def test_bluetooth_gatt_start_notify_abort_callback_cleans_up( + api_client: tuple[ + APIClient, APIConnection, asyncio.Transport, APIPlaintextFrameHelper + ], +) -> None: + """Test that the abort callback (second return value) cleans up _notify_callbacks.""" + client, connection, _transport, protocol = api_client + + handlers_before = len(list(itertools.chain(*connection._message_handlers.values()))) + + def on_bluetooth_gatt_notify(handle: int, data: bytearray) -> None: + pass + + notify_task = asyncio.create_task( + client.bluetooth_gatt_start_notify(1234, 1, on_bluetooth_gatt_notify) + ) + await asyncio.sleep(0) + mock_data_received( + protocol, + generate_plaintext_packet(BluetoothGATTNotifyResponse(address=1234, handle=1)), + ) + + _cancel_cb, abort_cb = await notify_task + + # Verify the callback is registered + assert (1234, 1) in client._notify_callbacks + + # Call abort callback directly (simulates connection lost scenario) + abort_cb() + + # Verify _notify_callbacks is cleaned up + assert (1234, 1) not in client._notify_callbacks + + # Verify handlers are cleaned up + assert ( + len(list(itertools.chain(*connection._message_handlers.values()))) + == handlers_before + ) + + +async def test_bluetooth_gatt_stop_notify_for_address( + api_client: tuple[ + APIClient, APIConnection, asyncio.Transport, APIPlaintextFrameHelper + ], +) -> None: + """Test bluetooth_gatt_stop_notify_for_address stops all notifies for an address.""" + client, connection, _transport, protocol = api_client + + handlers_before = len(list(itertools.chain(*connection._message_handlers.values()))) + + def on_bluetooth_gatt_notify(handle: int, data: bytearray) -> None: + pass + + # Start multiple notifies for the same address + notify_task1 = asyncio.create_task( + client.bluetooth_gatt_start_notify(1234, 1, on_bluetooth_gatt_notify) + ) + await asyncio.sleep(0) + mock_data_received( + protocol, + generate_plaintext_packet(BluetoothGATTNotifyResponse(address=1234, handle=1)), + ) + await notify_task1 + + notify_task2 = asyncio.create_task( + client.bluetooth_gatt_start_notify(1234, 2, on_bluetooth_gatt_notify) + ) + await asyncio.sleep(0) + mock_data_received( + protocol, + generate_plaintext_packet(BluetoothGATTNotifyResponse(address=1234, handle=2)), + ) + await notify_task2 + + # Also start a notify for a different address + notify_task3 = asyncio.create_task( + client.bluetooth_gatt_start_notify(5678, 1, on_bluetooth_gatt_notify) + ) + await asyncio.sleep(0) + mock_data_received( + protocol, + generate_plaintext_packet(BluetoothGATTNotifyResponse(address=5678, handle=1)), + ) + await notify_task3 + + # Verify all callbacks are registered + assert (1234, 1) in client._notify_callbacks + assert (1234, 2) in client._notify_callbacks + assert (5678, 1) in client._notify_callbacks + + # Stop all notifies for address 1234 + client.bluetooth_gatt_stop_notify_for_address(1234) + + # Verify callbacks for 1234 are removed but 5678 remains + assert (1234, 1) not in client._notify_callbacks + assert (1234, 2) not in client._notify_callbacks + assert (5678, 1) in client._notify_callbacks + + # Clean up + client.bluetooth_gatt_stop_notify(5678, 1) + + # Verify all handlers are cleaned up + assert ( + len(list(itertools.chain(*connection._message_handlers.values()))) + == handlers_before + ) + + +async def test_bluetooth_device_connect_cleans_up_notify_on_disconnect( + api_client: tuple[ + APIClient, APIConnection, asyncio.Transport, APIPlaintextFrameHelper + ], +) -> None: + """Test that notify callbacks are cleaned up when device disconnects.""" + client, _connection, _transport, protocol = api_client + + def on_bluetooth_gatt_notify(handle: int, data: bytearray) -> None: + pass + + # Start a notify + notify_task = asyncio.create_task( + client.bluetooth_gatt_start_notify(1234, 1, on_bluetooth_gatt_notify) + ) + await asyncio.sleep(0) + mock_data_received( + protocol, + generate_plaintext_packet(BluetoothGATTNotifyResponse(address=1234, handle=1)), + ) + await notify_task + + # Verify the callback is registered + assert (1234, 1) in client._notify_callbacks + + # Simulate device connecting (sets up the disconnect handler) + connection_states = [] + + def on_bluetooth_connection_state(connected: bool, mtu: int, error: int) -> None: + connection_states.append((connected, mtu, error)) + + connect_task = asyncio.create_task( + client.bluetooth_device_connect( + 1234, + on_bluetooth_connection_state, + feature_flags=BluetoothProxyFeature.REMOTE_CACHING, + address_type=0, + ) + ) + await asyncio.sleep(0) + + # Send connection response + mock_data_received( + protocol, + generate_plaintext_packet( + BluetoothDeviceConnectionResponse(address=1234, connected=True, mtu=500) + ), + ) + cancel = await connect_task + + # Verify connected state was received + assert connection_states == [(True, 500, 0)] + + # Now simulate disconnect + mock_data_received( + protocol, + generate_plaintext_packet( + BluetoothDeviceConnectionResponse(address=1234, connected=False, error=0) + ), + ) + await asyncio.sleep(0) + + # Verify disconnect state was received + assert connection_states == [(True, 500, 0), (False, 0, 0)] + + # Verify notify callback was cleaned up + assert (1234, 1) not in client._notify_callbacks + + # Clean up + cancel() + + async def test_subscribe_bluetooth_le_advertisements( api_client: tuple[ APIClient, APIConnection, asyncio.Transport, APIPlaintextFrameHelper @@ -2458,6 +2684,67 @@ def on_zwave_proxy_request(msg: ZWaveProxyRequest) -> None: assert first_msg.data == b"\x00\x01\x02\x03" +async def test_subscribe_infrared_rf_receive( + api_client: tuple[ + APIClient, APIConnection, asyncio.Transport, APIPlaintextFrameHelper + ], +) -> None: + """Test subscribe_infrared_rf_receive.""" + client, _connection, _transport, protocol = api_client + test_msg = [] + + def on_infrared_rf_receive(msg: InfraredRFReceiveEvent) -> None: + test_msg.append(msg) + + client.subscribe_infrared_rf_receive(on_infrared_rf_receive) + await asyncio.sleep(0) + response: message.Message = InfraredRFReceiveEventPb( + key=123, device_id=5, timings=[9000, -4500, 560, -560, 560, -1690] + ) + mock_data_received(protocol, generate_plaintext_packet(response)) + + assert len(test_msg) == 1 + first_msg = test_msg[0] + assert first_msg.key == 123 + assert first_msg.device_id == 5 + assert first_msg.timings == [9000, -4500, 560, -560, 560, -1690] + + +async def test_infrared_rf_transmit_raw_timings( + api_client: tuple[ + APIClient, APIConnection, asyncio.Transport, APIPlaintextFrameHelper + ], +) -> None: + """Test infrared_rf_transmit_raw_timings.""" + client, connection, _transport, _protocol = api_client + sent_messages: list[InfraredRFTransmitRawTimingsRequestPb] = [] + + # Capture sent messages + original_send = connection.send_message + + def capture_send(msg: Any) -> None: + if isinstance(msg, InfraredRFTransmitRawTimingsRequestPb): + sent_messages.append(msg) + original_send(msg) + + connection.send_message = capture_send + + # Send raw timings transmit request with repeat_count + timings = [9000, 4500, 560, 560, 560, 1690, 560, 560] + client.infrared_rf_transmit_raw_timings( + key=999, carrier_frequency=38000, timings=timings, repeat_count=3, device_id=7 + ) + + # Verify the message was sent + assert len(sent_messages) == 1 + sent_msg = sent_messages[0] + assert sent_msg.key == 999 + assert sent_msg.device_id == 7 + assert sent_msg.carrier_frequency == 38000 + assert sent_msg.repeat_count == 3 + assert list(sent_msg.timings) == timings + + async def test_execute_service_with_response( api_client: tuple[ APIClient, APIConnection, asyncio.Transport, APIPlaintextFrameHelper diff --git a/tests/test_model.py b/tests/test_model.py index 65aaf8e95..31d350074 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -25,6 +25,7 @@ FanStateResponse, HomeassistantActionRequest, HomeassistantServiceMap, + InfraredRFReceiveEvent as InfraredRFReceiveEventPb, LightStateResponse, ListEntitiesAlarmControlPanelResponse, ListEntitiesBinarySensorResponse, @@ -106,6 +107,9 @@ FanInfo, FanState, HomeassistantServiceCall, + InfraredCapability, + InfraredInfo, + InfraredRFReceiveEvent, LegacyCoverState, LightColorCapability, LightInfo, @@ -1925,3 +1929,48 @@ def test_execute_service_response(): assert result["success"] is True assert result["error_message"] == "" assert result["response_data"] == b"test_data" + + +def test_infrared_capability_enum() -> None: + """Test InfraredCapability enum values.""" + assert InfraredCapability.TRANSMITTER == 1 + assert InfraredCapability.RECEIVER == 2 + + +def test_infrared_rf_receive_event_conversion() -> None: + """Test InfraredRFReceiveEvent conversion from protobuf.""" + # Test with empty timings + pb_event = InfraredRFReceiveEventPb(key=123, device_id=0) + event = InfraredRFReceiveEvent.from_pb(pb_event) + assert event.key == 123 + assert event.device_id == 0 + assert event.timings == [] + + # Test with actual timings + pb_event_with_timings = InfraredRFReceiveEventPb( + key=456, device_id=5, timings=[9000, -4500, 560, -560, 560, -1690] + ) + event_with_timings = InfraredRFReceiveEvent.from_pb(pb_event_with_timings) + assert event_with_timings.key == 456 + assert event_with_timings.device_id == 5 + assert event_with_timings.timings == [9000, -4500, 560, -560, 560, -1690] + + # Test to_dict + event_dict = event_with_timings.to_dict() + assert event_dict["key"] == 456 + assert event_dict["device_id"] == 5 + assert event_dict["timings"] == [9000, -4500, 560, -560, 560, -1690] + + # Test from_dict + event_from_dict = InfraredRFReceiveEvent.from_dict( + {"key": 789, "device_id": 3, "timings": [1000, -2000, 3000, -4000]} + ) + assert event_from_dict.key == 789 + assert event_from_dict.device_id == 3 + assert event_from_dict.timings == [1000, -2000, 3000, -4000] + + +def test_infrared_info_in_type_to_name() -> None: + """Test that InfraredInfo is registered in _TYPE_TO_NAME.""" + assert InfraredInfo in _TYPE_TO_NAME + assert _TYPE_TO_NAME[InfraredInfo] == "infrared"