From ab5c224d3c6e65813efe0f87cd6e1b19969fc197 Mon Sep 17 00:00:00 2001 From: Jeeva Kandasamy Date: Sat, 18 Jul 2026 08:09:34 +0530 Subject: [PATCH 1/4] bump esphome proto version to 2026.7.0 Signed-off-by: Jeeva Kandasamy --- .gitignore | 1 + CHANGELOG.md | 51 + README.md | 41 +- cli/command/device/get_entities.go | 4 +- cli/command/root/cmd.go | 16 +- cli/command/root/login.go | 33 +- cli/types/config.go | 44 +- cli/version/version.go | 2 +- docs/API_PROTO_UPDATE_2024.5.0_to_2026.7.0.md | 327 + examples/camera/main.go | 4 +- examples/commom.go | 9 +- pkg/api/api.pb.go | 17489 +++++++++------- pkg/api/api_options.pb.go | 416 +- pkg/api/helper.go | 735 +- pkg/client/client.go | 200 +- pkg/types/types.go | 58 +- proto/README.md | 20 +- proto/api.proto | 1472 +- proto/api_options.proto | 97 +- proto/generate.sh | 39 +- scripts/generate_executables.sh | 2 +- 21 files changed, 12911 insertions(+), 8149 deletions(-) create mode 100644 docs/API_PROTO_UPDATE_2024.5.0_to_2026.7.0.md diff --git a/.gitignore b/.gitignore index c2200ee..0cdceec 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /esphome_config /.esphome/ /secrets.yaml +esphomectl diff --git a/CHANGELOG.md b/CHANGELOG.md index 59e30ba..62aac9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,56 @@ ## Changes by Version +### v1.4.0 (2026-07-18) + +Proto baseline jumped from ESPHome **2024.5.0** (library snapshot 2024-06-15) to +[**2026.7.0**](https://github.com/esphome/esphome/releases/tag/2026.7.0). +Full migration notes: [docs/API_PROTO_UPDATE_2024.5.0_to_2026.7.0.md](docs/API_PROTO_UPDATE_2024.5.0_to_2026.7.0.md). + +**Contains BREAKING CHANGES** (see below and the doc above). + +#### Protocol and generated API +* Sync `api.proto` / `api_options.proto` with ESPHome **2026.7.0** +* Regenerate `pkg/api` protobuf bindings; expand `helper.go` to all **148** message type IDs + (was 111; highest ID 114 → 148) +* New entities/features on the wire: siren, update, water heater, infrared, serial proxy, + radio frequency, Z-Wave proxy, noise key provisioning, HA action / service responses, + Bluetooth scanner mode and connection params, voice assistant extensions + +#### Client (`pkg/client`, `pkg/types`) +* Advertise Hello API version **1.14** +* Session setup: use **`Hello()`** on modern devices (ESPHome 2026.1+) +* **`Login(password)`** kept for older firmware only; password auth was **removed** in + ESPHome 2026.1.0. Prefer Noise encryption via `encryptionKey` on `GetClient` +* `Login` treats auth-response timeout as success after Hello (modern devices ignore password) +* Answer device-originated `GetTimeRequest` (timezone-aware epoch seconds) +* Record `DisconnectReason` from device `DisconnectRequest` +* Safer shutdown (`close`-once + deadline) and register waiters before send +* `DeviceInfo` gains friendly name, manufacturer, project, BT MAC, encryption flags, + areas/devices, Z-Wave, serial proxies, and related fields +* `GetLogEntry`: decode log `message` from `bytes`; `SendFailed` always false (field removed) + +#### CLI (`esphomectl`) and examples +* Always complete session setup: `Hello()`, or legacy `Login(password)` when a password is set +* Warn on stderr when API password is used (deprecated; removed in ESPHome 2026.1.0) +* `--password` help/examples mark password auth as removed; prefer `--encryption-key` +* Persist expanded device info after login; entity list UI no longer uses removed `unique_id` +* Examples follow the same Hello / Login session pattern + +#### Build and docs +* Release builds use `-trimpath` and slim ldflags (`-s -w`); README documents the same for local CLI builds +* Migration guide: `docs/API_PROTO_UPDATE_2024.5.0_to_2026.7.0.md` +* README / `proto/README.md` updated for 2026.7.0 and encryption-first setup + +#### Breaking changes +* `api.ConnectRequest` / `api.ConnectResponse` → `api.AuthenticationRequest` / `api.AuthenticationResponse` + (IDs 3/4; not processed by ESPHome 2026.1.0+) +* `api.HomeassistantServiceResponse` → `api.HomeassistantActionRequest` +* Entity list messages: `unique_id` removed (use `object_id` + `key`, optional `device_id`) +* `SubscribeLogsResponse.message`: `string` → `bytes`; `send_failed` removed +* `BluetoothLEAdvertisementResponse.name`: `string` → `bytes` +* Bluetooth helper constants use `*TypeID` suffix (aligned with other message IDs) +* Callers must run `Hello()` (or deprecated `Login`) after `GetClient` for a full session + ### v1.3.0 (2023-01-06) * update proto: bluetooth support included ([#7](https://github.com/mycontroller-org/esphome_api/pull/7), [@jkandasa](https://github.com/jkandasa)) * support encrypted connection ([#5](https://github.com/mycontroller-org/esphome_api/pull/5), [@jkandasa](https://github.com/jkandasa)) diff --git a/README.md b/README.md index bd7dc42..9b0c0ec 100644 --- a/README.md +++ b/README.md @@ -10,10 +10,22 @@ commands, subscribing to state updates, and receiving device information. ## Installation -To install the `esphome_api` library, use the following command: +Library: ```bash -go build -o esphome ./cli/main.go +go get github.com/mycontroller-org/esphome_api@latest +``` + +CLI (`esphomectl`): + +```bash +go build -trimpath -ldflags "-s -w" -o esphomectl ./cli/main.go +``` + +Release binaries (multi-platform, version ldflags): + +```bash +./scripts/generate_executables.sh ``` ## Usage @@ -47,16 +59,20 @@ if err != nil { defer client.Close() ``` -### 3. Connect and Authenticate (if required) +### 3. Hello ```go -// If your device requires authentication, log in with the password -password := "YOUR_PASSWORD" -if err := client.Login(password); err != nil { +// Required after GetClient on modern devices. +if _, err := client.Hello(); err != nil { log.Fatalln(err) } + +// Deprecated (pre-2026.1 password auth only): +// if err := client.Login("YOUR_PASSWORD"); err != nil { ... } ``` +See [docs/API_PROTO_UPDATE_2024.5.0_to_2026.7.0.md](docs/API_PROTO_UPDATE_2024.5.0_to_2026.7.0.md) for protocol changes and breaking changes. + ### 4. Send Commands and Receive State Updates ```go @@ -105,21 +121,22 @@ tool, which utilizes the `esphome_api` library: active: esphome.local:6053 devices: - address: esphome.local:6053 - password: BASE64/YOUR_ENCODED_PASSWORD encryptionKey: YOUR_ENCRYPTION_KEY timeout: 10s info: name: My ESPHome Device model: NodeMCU macAddress: AC:BC:32:89:0E:A9 - esphomeVersion: "1.15.0" - compilationTime: "2023-10-26T10:00:00" - usesPassword: true + esphomeVersion: "2026.7.0" + compilationTime: "2026-01-15T10:00:00" + usesPassword: false hasDeepSleep: false - statusOn: 2023-10-26T12:00:00+05:30 + apiEncryptionSupported: true + statusOn: 2026-07-18T12:00:00+05:30 ``` -**Note:** The password is encoded in Base64 format. You can encode your password using the following command: +**Note:** Prefer `encryptionKey`. API password auth was removed in ESPHome 2026.1.0. +If you still need a password for older firmware, store it Base64-encoded: ```bash echo -n "YOUR_PASSWORD" | base64 diff --git a/cli/command/device/get_entities.go b/cli/command/device/get_entities.go index 5e10377..7bfaad8 100644 --- a/cli/command/device/get_entities.go +++ b/cli/command/device/get_entities.go @@ -93,7 +93,7 @@ var getEntitiesCmd = &cobra.Command{ {Title: "name", ValuePath: "name"}, {Title: "object id", ValuePath: "objectId"}, {Title: "key", ValuePath: "key"}, - {Title: "unique id", ValuePath: "uniqueId"}, + {Title: "device id", ValuePath: "deviceId"}, {Title: "effects", ValuePath: "effects"}, {Title: "icon", ValuePath: "icon"}, } @@ -104,7 +104,7 @@ var getEntitiesCmd = &cobra.Command{ {Title: "name", ValuePath: "name"}, {Title: "object id", ValuePath: "objectId"}, {Title: "key", ValuePath: "key"}, - {Title: "unique id", ValuePath: "uniqueId"}, + {Title: "device id", ValuePath: "deviceId"}, {Title: "device class", ValuePath: "deviceClass"}, } printer.Print(cmd.OutOrStdout(), headers, _sensors, rootCmd.HideHeader, rootCmd.OutputFormat, rootCmd.Pretty) diff --git a/cli/command/root/cmd.go b/cli/command/root/cmd.go index 885fa58..723e1b6 100644 --- a/cli/command/root/cmd.go +++ b/cli/command/root/cmd.go @@ -81,11 +81,17 @@ func GetClient(cfg *cliTY.DeviceConfig, callBackFunc TY.CallBackFunc) (*client.C if err != nil { return nil, err } - if cfg.GetPassword() != "" { - err = _client.Login(cfg.GetPassword()) - if err != nil { - return nil, err - } + password := cfg.GetPassword() + if password != "" { + fmt.Fprintln(ioStreams.ErrOut, + "WARNING: API password auth is deprecated and was removed in ESPHome 2026.1.0. Prefer --encryption-key / encryptionKey.") + err = _client.Login(password) // legacy password auth (pre-2026.1) + } else { + _, err = _client.Hello() + } + if err != nil { + _ = _client.Close() + return nil, err } return _client, nil diff --git a/cli/command/root/login.go b/cli/command/root/login.go index c24ecb9..6e314ba 100644 --- a/cli/command/root/login.go +++ b/cli/command/root/login.go @@ -16,9 +16,9 @@ var ( func init() { AddCommand(loginCmd) - loginCmd.Flags().StringVar(&devicePassword, "password", "", "Password to login into esphome device") loginCmd.Flags().StringVar(&deviceEncryptionKey, "encryption-key", "", "Encryption key to login into esphome device") loginCmd.Flags().DurationVar(&deviceTimeout, "timeout", 10*time.Second, "esphome device communication timeout") + loginCmd.Flags().StringVar(&devicePassword, "password", "", "API password (removed in ESPHome 2026.1.0)") AddCommand(logoutCmd) } @@ -29,11 +29,11 @@ var loginCmd = &cobra.Command{ Example: ` # login to esphome device without password and encryption key esphomectl login my_esphome.local:6053 - # login to esphome device with password - esphomectl login my_esphome.local:6053 --password my_secret - - # login to esphome device with encryption key + # login with encryption key (recommended) esphomectl login my_esphome.local:6053 --encryption-key my_encryption_key + + # login with API password (removed in ESPHome 2026.1.0; older firmware only) + esphomectl login my_esphome.local:6053 --password my_secret `, Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { @@ -57,14 +57,21 @@ var loginCmd = &cobra.Command{ } // update device info deviceCfg.Info = cliTY.DeviceInfo{ - Name: deviceInfo.Name, - Model: deviceInfo.Model, - MacAddress: deviceInfo.MacAddress, - EsphomeVersion: deviceInfo.EsphomeVersion, - CompilationTime: deviceInfo.CompilationTime, - UsesPassword: deviceInfo.UsesPassword, - HasDeepSleep: deviceInfo.HasDeepSleep, - StatusOn: time.Now(), + Name: deviceInfo.Name, + Model: deviceInfo.Model, + MacAddress: deviceInfo.MacAddress, + EsphomeVersion: deviceInfo.EsphomeVersion, + CompilationTime: deviceInfo.CompilationTime, + UsesPassword: deviceInfo.UsesPassword, + HasDeepSleep: deviceInfo.HasDeepSleep, + FriendlyName: deviceInfo.FriendlyName, + Manufacturer: deviceInfo.Manufacturer, + ProjectName: deviceInfo.ProjectName, + ProjectVersion: deviceInfo.ProjectVersion, + SuggestedArea: deviceInfo.SuggestedArea, + BluetoothMacAddress: deviceInfo.BluetoothMacAddress, + ApiEncryptionSupported: deviceInfo.ApiEncryptionSupported, + StatusOn: time.Now(), } AddDevice(deviceCfg) WriteConfigFile() diff --git a/cli/types/config.go b/cli/types/config.go index 7c84255..fde89e5 100644 --- a/cli/types/config.go +++ b/cli/types/config.go @@ -18,25 +18,39 @@ type Config struct { } type DeviceInfo struct { - Name string `yaml:"name"` - Model string `yaml:"model"` - MacAddress string `yaml:"macAddress"` - EsphomeVersion string `yaml:"esphomeVersion"` - CompilationTime string `yaml:"compilationTime"` - UsesPassword bool `yaml:"usesPassword"` - HasDeepSleep bool `yaml:"hasDeepSleep"` - StatusOn time.Time `yaml:"statusOn"` + Name string `yaml:"name"` + Model string `yaml:"model"` + MacAddress string `yaml:"macAddress"` + EsphomeVersion string `yaml:"esphomeVersion"` + CompilationTime string `yaml:"compilationTime"` + UsesPassword bool `yaml:"usesPassword"` // removed in ESPHome 2026.1.0 + HasDeepSleep bool `yaml:"hasDeepSleep"` + FriendlyName string `yaml:"friendlyName,omitempty"` + Manufacturer string `yaml:"manufacturer,omitempty"` + ProjectName string `yaml:"projectName,omitempty"` + ProjectVersion string `yaml:"projectVersion,omitempty"` + SuggestedArea string `yaml:"suggestedArea,omitempty"` + BluetoothMacAddress string `yaml:"bluetoothMacAddress,omitempty"` + ApiEncryptionSupported bool `yaml:"apiEncryptionSupported,omitempty"` + StatusOn time.Time `yaml:"statusOn"` } func (di *DeviceInfo) Clone() DeviceInfo { return DeviceInfo{ - Name: di.Name, - Model: di.Model, - MacAddress: di.MacAddress, - EsphomeVersion: di.EsphomeVersion, - CompilationTime: di.CompilationTime, - UsesPassword: di.UsesPassword, - HasDeepSleep: di.HasDeepSleep, + Name: di.Name, + Model: di.Model, + MacAddress: di.MacAddress, + EsphomeVersion: di.EsphomeVersion, + CompilationTime: di.CompilationTime, + UsesPassword: di.UsesPassword, + HasDeepSleep: di.HasDeepSleep, + FriendlyName: di.FriendlyName, + Manufacturer: di.Manufacturer, + ProjectName: di.ProjectName, + ProjectVersion: di.ProjectVersion, + SuggestedArea: di.SuggestedArea, + BluetoothMacAddress: di.BluetoothMacAddress, + ApiEncryptionSupported: di.ApiEncryptionSupported, } } diff --git a/cli/version/version.go b/cli/version/version.go index 455e789..ca9da59 100644 --- a/cli/version/version.go +++ b/cli/version/version.go @@ -7,7 +7,7 @@ import ( var ( gitCommit string - version string + version string = "devel" buildDate string ) diff --git a/docs/API_PROTO_UPDATE_2024.5.0_to_2026.7.0.md b/docs/API_PROTO_UPDATE_2024.5.0_to_2026.7.0.md new file mode 100644 index 0000000..51e1e04 --- /dev/null +++ b/docs/API_PROTO_UPDATE_2024.5.0_to_2026.7.0.md @@ -0,0 +1,327 @@ +# ESPHome API Proto Update: 2024.5.0 → 2026.7.0 + +## Version jump + +| | From | To | +| ----------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| ESPHome release | [**2024.5.0**](https://github.com/esphome/esphome/releases/tag/2024.5.0) | [**2026.7.0**](https://github.com/esphome/esphome/releases/tag/2026.7.0) | +| Library baseline | Proto last synced 2024-06-15 (wire-compatible with 2024.5.0–2024.5.5) | This update | +| Message types (`option (id)`) | 111 | 148 | +| Highest message ID | 114 | 148 | + +**From (previous library protos)** + +- Snapshot committed 2024-06-15 from ESPHome `dev` at that time +- Message count and max ID match release **2024.5.0** through **2024.5.5** +- Still used `ConnectRequest` / `ConnectResponse` password auth +- Entity list messages still carried `unique_id` + +**To (this update)** + +- [`api.proto`](https://github.com/esphome/esphome/blob/2026.7.0/esphome/components/api/api.proto) +- [`api_options.proto`](https://github.com/esphome/esphome/blob/2026.7.0/esphome/components/api/api_options.proto) +- Pinned to ESPHome release **2026.7.0** (not `dev`) + +## Summary + +| Item | Before (2024.5.0) | After (2026.7.0) | +| -------------------------------- | ------------------------------- | -------------------------------------------- | +| Proto source | ESPHome **2024.5.x** equivalent | ESPHome **2026.7.0** | +| Message types with `option (id)` | 111 | 148 | +| Highest message ID | 114 | 148 | +| Password authentication | Supported via `ConnectRequest` | **Deprecated / removed** (ESPHome 2026.1.0+) | +| Entity `unique_id` field | Present on list-entity messages | **Removed** (field 4 reserved) | +| Log message payload | `string message` | `bytes message` | + +Regenerated artifacts: + +- `proto/api.proto`, `proto/api_options.proto` - copied from ESPHome release 2026.7.0 +- `pkg/api/api.pb.go`, `pkg/api/api_options.pb.go` - `protoc-gen-go` output +- `pkg/api/helper.go` - complete type-id maps for all 148 message IDs + +--- + +## Breaking changes + +### 1. Password authentication removed (ESPHome 2026.1.0) + +**What changed in the protocol** + +- `ConnectRequest` / `ConnectResponse` were renamed to + `AuthenticationRequest` / `AuthenticationResponse` (IDs **3** and **4**). +- Those messages are **deprecated** and **not processed** by ESPHome 2026.1.0+. +- Connection authentication is completed after **Hello** alone. +- Message IDs 3 and 4 are reserved and must not be reused. + +**Impact on this library** + +| Old API | New API | +| --------------------------- | ---------------------------------- | +| `api.ConnectRequest` | `api.AuthenticationRequest` | +| `api.ConnectResponse` | `api.AuthenticationResponse` | +| `api.ConnectRequestTypeID` | `api.AuthenticationRequestTypeID` | +| `api.ConnectResponseTypeID` | `api.AuthenticationResponseTypeID` | + +Client API for session setup: + +| Method | Use for | Behavior | +| ------------------------ | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `client.Hello()` | Modern devices (ESPHome 2026.1+) | Sends `HelloRequest` (API version 1.14) and waits for `HelloResponse`. | +| `client.Login(password)` | **Deprecated** - older firmware only | Hello, then `AuthenticationRequest`; waits for `AuthenticationResponse`. Invalid password → `types.ErrPassword`. Timeout (new firmware ignores auth) is treated as success after Hello. | + +**Migration** + +- Call **`Hello()`** for current devices. +- Prefer **Noise encryption** (`encryptionKey` on `GetClient`) instead of API password. +- Use **`Login(password)` only** if the device still runs pre-2026.1 firmware with `api: password:`. +- Devices that only had `api: password:` should be reconfigured to + `api: encryption: key: ...` (see [ESPHome API docs](https://esphome.io/components/api/)). + +`DeviceInfo.UsesPassword` remains populated when the device sends it, but the field is +deprecated on the wire. + +--- + +### 2. `HomeassistantServiceResponse` renamed + +| Old | New | ID | +| ------------------------------ | ---------------------------- | --- | +| `HomeassistantServiceResponse` | `HomeassistantActionRequest` | 35 | + +New related message: + +| Message | ID | Direction | +| ----------------------------- | --- | ------------------------------- | +| `HomeassistantActionResponse` | 130 | Client → device (action result) | + +Any type switch / assert on `*api.HomeassistantServiceResponse` must use +`*api.HomeassistantActionRequest`. + +--- + +### 3. Entity `unique_id` removed + +Field **4** (`string unique_id`) is **reserved** on nearly all +`ListEntities*Response` messages. Use: + +- `object_id` + `key` for entity identity +- optional `device_id` for multi-device setups + +Affected list-entity messages include binary sensor, cover, fan, light, sensor, +switch, text sensor, camera, climate, number, select, lock, button, media player, +alarm control panel, text, date, time, event, valve, datetime, and new entity types. + +**Migration:** stop reading `UniqueId` / `unique_id` from list responses. + +--- + +### 4. Log messages are bytes + +`SubscribeLogsResponse`: + +| Field | Old | New | +| ----------------------- | -------- | ----------- | +| `message` (field 3) | `string` | `bytes` | +| `send_failed` (field 4) | `bool` | **removed** | + +`types.GetLogEntry` converts `[]byte` to `string`. `LogEntry.SendFailed` is kept +as always-`false` for older callers. + +--- + +### 5. Bluetooth LE advertisement name is bytes + +`BluetoothLEAdvertisementResponse.name` (field 2): `string` → `bytes`. + +--- + +### 6. Bluetooth type-id constant suffix normalized + +Historical helper constants used an `ID` suffix (e.g. `BluetoothDeviceRequestID`). +All message type constants now use the `TypeID` suffix: + +``` +SubscribeBluetoothLEAdvertisementsRequestID → SubscribeBluetoothLEAdvertisementsRequestTypeID +BluetoothLEAdvertisementResponseID → BluetoothLEAdvertisementResponseTypeID +… (all former *ID bluetooth constants) +``` + +--- + +### 7. Incomplete / incorrect type maps fixed + +`pkg/api/helper.go` previously: + +- Stopped around Bluetooth GATT notify (ID 84) and omitted many existing IDs (85-114). +- Mapped `NumberCommandRequest` to the wrong type ID (`ClimateCommandRequestTypeID`). + +It now maps **all** message IDs from the current proto. + +Unknown type IDs on the wire still produce a protocol error from the connection reader. + +--- + +## Non-breaking / additive changes + +### New message types (IDs) + +| ID | Message | Notes | +| --- | -------------------------------------- | ------------------------ | +| 55 | `ListEntitiesSirenResponse` | Siren entity | +| 56 | `SirenStateResponse` | | +| 57 | `SirenCommandRequest` | | +| 115 | `VoiceAssistantTimerEventResponse` | Voice assistant | +| 116 | `ListEntitiesUpdateResponse` | Update entity | +| 117 | `UpdateStateResponse` | | +| 118 | `UpdateCommandRequest` | | +| 119 | `VoiceAssistantAnnounceRequest` | | +| 120 | `VoiceAssistantAnnounceFinished` | | +| 121 | `VoiceAssistantConfigurationRequest` | | +| 122 | `VoiceAssistantConfigurationResponse` | | +| 123 | `VoiceAssistantSetConfiguration` | | +| 124 | `NoiseEncryptionSetKeyRequest` | Provision encryption key | +| 125 | `NoiseEncryptionSetKeyResponse` | | +| 126 | `BluetoothScannerStateResponse` | | +| 127 | `BluetoothScannerSetModeRequest` | | +| 128 | `ZWaveProxyFrame` | Z-Wave proxy | +| 129 | `ZWaveProxyRequest` | | +| 130 | `HomeassistantActionResponse` | HA action result | +| 131 | `ExecuteServiceResponse` | User service response | +| 132 | `ListEntitiesWaterHeaterResponse` | Water heater | +| 133 | `WaterHeaterStateResponse` | | +| 134 | `WaterHeaterCommandRequest` | | +| 135 | `ListEntitiesInfraredResponse` | Infrared | +| 136 | `InfraredRFTransmitRawTimingsRequest` | | +| 137 | `InfraredRFReceiveEvent` | | +| 138 | `SerialProxyConfigureRequest` | Serial proxy | +| 139 | `SerialProxyDataReceived` | | +| 140 | `SerialProxyWriteRequest` | | +| 141 | `SerialProxySetModemPinsRequest` | | +| 142 | `SerialProxyGetModemPinsRequest` | | +| 143 | `SerialProxyGetModemPinsResponse` | | +| 144 | `SerialProxyRequest` | | +| 145 | `BluetoothSetConnectionParamsRequest` | | +| 146 | `BluetoothSetConnectionParamsResponse` | | +| 147 | `SerialProxyRequestResponse` | | +| 148 | `ListEntitiesRadioFrequencyResponse` | RF entity | + +These are available as generated Go types under `pkg/api` and are registered in +`TypeID` / `NewMessageByTypeID`. + +### New / extended fields on existing messages + +**`DeviceInfoResponse`** + +- `bluetooth_mac_address`, `api_encryption_supported`, `api_encryption_provisionable` +- `devices` (`DeviceInfo` sub-devices), `areas`, `area` +- `zwave_proxy_feature_flags`, `zwave_home_id` +- `serial_proxies` +- Existing fields such as `friendly_name`, `manufacturer`, `project_*` remain + +**`DisconnectRequest`** + +- Optional `reason` (`DisconnectReason` enum), e.g. provisioning window closed + +**Most entity state/command/list messages** + +- Optional `device_id` for multi-device configurations + +**`GetTimeResponse`** + +- `timezone`, `parsed_timezone` + +**`ExecuteServiceRequest`** + +- `call_id`, `return_response` (pairs with `ExecuteServiceResponse` ID 131) + +**`ListEntitiesServicesResponse`** + +- `supports_response` + +**`ListEntitiesClimateResponse`** + +- `feature_flags`, `temperature_unit` + +**`ListEntitiesMediaPlayerResponse`** + +- `supported_formats`, `feature_flags` + +**`BluetoothConnectionsFreeResponse`** + +- `allocated` + +**`SubscribeHomeAssistantStateResponse`** + +- `once` + +### Client behavior improvements + +- `HelloRequest` now advertises API version **1.14** (`ClientAPIVersionMajor/Minor`). +- Client answers device-originated **`GetTimeRequest`** with current epoch seconds. +- `SendAndWaitForResponse` registers the waiter **before** sending (avoids response race). +- CLI always completes session setup (`Hello()`, or deprecated `Login(password)` when configured). +- `client.NoiseEncryptionSetKey` helper for key provisioning (IDs 124/125). +- `types.DeviceInfo` exposes additional device metadata fields. + +### `api_options.proto` + +Extended with ESPHome code-generation options (`base_class`, field-level +`container_pointer`, `fixed_vector`, `force`, `mac_address`, etc.). These affect +ESPHome's C++ generator; they do not change wire layout for standard protobuf +fields used by this Go client. + +--- + +## Library surface map + +| Package | Role | +| ---------------- | ----------------------------------------------------- | +| `proto/` | Source `.proto` files (from ESPHome) | +| `pkg/api` | Generated messages + type-id helpers | +| `pkg/connection` | Plaintext / Noise framing | +| `pkg/client` | High-level client (`Hello`, `Login`, `DeviceInfo`, …) | +| `pkg/types` | Friendly wrappers (`DeviceInfo`, `LogEntry`, errors) | +| `cli/` | `esphomectl` | + +--- + +## Compatibility matrix + +| ESPHome device | Encryption | Password | Expected client usage | +| --------------------------------- | ---------- | -------- | ----------------------------------------- | +| < 2026.1, no encryption | no | optional | `GetClient(..., "")` + `Login(password)` | +| < 2026.1, encrypted | yes | optional | `GetClient(..., key)` + `Login(password)` | +| ≥ 2026.1, encrypted (recommended) | yes | n/a | `GetClient(..., key)` + `Hello()` | +| ≥ 2026.1, plaintext, no password | no | n/a | `GetClient(..., "")` + `Hello()` | + +--- + +## How to regenerate after a future ESPHome proto change + +```bash +# 1. Refresh protos from a specific ESPHome release tag (example: 2026.7.0) +ESPHOME_TAG=2026.7.0 +curl -sL "https://raw.githubusercontent.com/esphome/esphome/${ESPHOME_TAG}/esphome/components/api/api.proto" \ + -o proto/api.proto +curl -sL "https://raw.githubusercontent.com/esphome/esphome/${ESPHOME_TAG}/esphome/components/api/api_options.proto" \ + -o proto/api_options.proto + +# 2. Generate Go bindings +cd proto && ./generate.sh + +# 3. Refresh pkg/api/helper.go type-id maps (script or manual) to match option (id) values +# 4. go build ./... +# 5. Add docs/API_PROTO_UPDATE__to_.md and update CHANGELOG.md +``` + +--- + +## Files touched in this update + +- `proto/api.proto`, `proto/api_options.proto`, `proto/generate.sh` +- `pkg/api/api.pb.go`, `pkg/api/api_options.pb.go`, `pkg/api/helper.go` +- `pkg/client/client.go` +- `pkg/types/types.go` +- `cli/command/root/cmd.go`, `cli/command/root/login.go`, `cli/types/config.go` +- `cli/command/device/get_entities.go` +- `CHANGELOG.md`, `README.md`, `docs/API_PROTO_UPDATE_2024.5.0_to_2026.7.0.md` diff --git a/examples/camera/main.go b/examples/camera/main.go index 0731e92..24ed2f5 100644 --- a/examples/camera/main.go +++ b/examples/camera/main.go @@ -4,8 +4,8 @@ import ( "bytes" "fmt" "io/fs" - "io/ioutil" "log" + "os" "time" examples "github.com/mycontroller-org/esphome_api/examples" @@ -34,7 +34,7 @@ func main() { // if image received, convert it to jpeg if received { - err = ioutil.WriteFile("camera_image.jpeg", buffer.Bytes(), fs.ModePerm) + err = os.WriteFile("camera_image.jpeg", buffer.Bytes(), fs.ModePerm) if err != nil { fmt.Println(err) } diff --git a/examples/commom.go b/examples/commom.go index 07a7f51..e4b3541 100644 --- a/examples/commom.go +++ b/examples/commom.go @@ -18,7 +18,7 @@ const ( var ( HostAddressFlag = flag.String("address", "", "esphome node hostname or IP with port. example: my_esphome.local:6053") - PasswordFlag = flag.String("password", "", "esphome node API password") + PasswordFlag = flag.String("password", "", "esphome node API password (removed in ESPHome 2026.1.0)") EncryptionKeyFlag = flag.String("encryption-key", "", "esphome node API encryption key") TimeoutFlag = flag.Duration("timeout", 10*time.Second, "communication timeout") ) @@ -54,7 +54,12 @@ func GetClient(handlerFunc func(msg proto.Message)) (*esphome.Client, error) { return nil, err } - if err = client.Login(*PasswordFlag); err != nil { + if *PasswordFlag != "" { + err = client.Login(*PasswordFlag) + } else { + _, err = client.Hello() + } + if err != nil { _ = client.Close() return nil, err } diff --git a/pkg/api/api.pb.go b/pkg/api/api.pb.go index 9fd0577..85b7e99 100644 --- a/pkg/api/api.pb.go +++ b/pkg/api/api.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 -// protoc v3.21.12 +// protoc-gen-go v1.36.11 +// protoc v5.27.2 // source: api.proto package api @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -20,6 +21,106 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Reason a party is requesting the connection be closed. +type DisconnectReason int32 + +const ( + // No specific reason / not provided (default for older peers). + DisconnectReason_DISCONNECT_REASON_UNSPECIFIED DisconnectReason = 0 + // The device's provisioning window has expired. The device must be reset + // (power-cycled) to reopen the provisioning window before it will accept a + // connection again. + DisconnectReason_DISCONNECT_REASON_PROVISIONING_CLOSED DisconnectReason = 1 +) + +// Enum value maps for DisconnectReason. +var ( + DisconnectReason_name = map[int32]string{ + 0: "DISCONNECT_REASON_UNSPECIFIED", + 1: "DISCONNECT_REASON_PROVISIONING_CLOSED", + } + DisconnectReason_value = map[string]int32{ + "DISCONNECT_REASON_UNSPECIFIED": 0, + "DISCONNECT_REASON_PROVISIONING_CLOSED": 1, + } +) + +func (x DisconnectReason) Enum() *DisconnectReason { + p := new(DisconnectReason) + *p = x + return p +} + +func (x DisconnectReason) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DisconnectReason) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[0].Descriptor() +} + +func (DisconnectReason) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[0] +} + +func (x DisconnectReason) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use DisconnectReason.Descriptor instead. +func (DisconnectReason) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{0} +} + +type SerialProxyPortType int32 + +const ( + SerialProxyPortType_SERIAL_PROXY_PORT_TYPE_TTL SerialProxyPortType = 0 + SerialProxyPortType_SERIAL_PROXY_PORT_TYPE_RS232 SerialProxyPortType = 1 + SerialProxyPortType_SERIAL_PROXY_PORT_TYPE_RS485 SerialProxyPortType = 2 +) + +// Enum value maps for SerialProxyPortType. +var ( + SerialProxyPortType_name = map[int32]string{ + 0: "SERIAL_PROXY_PORT_TYPE_TTL", + 1: "SERIAL_PROXY_PORT_TYPE_RS232", + 2: "SERIAL_PROXY_PORT_TYPE_RS485", + } + SerialProxyPortType_value = map[string]int32{ + "SERIAL_PROXY_PORT_TYPE_TTL": 0, + "SERIAL_PROXY_PORT_TYPE_RS232": 1, + "SERIAL_PROXY_PORT_TYPE_RS485": 2, + } +) + +func (x SerialProxyPortType) Enum() *SerialProxyPortType { + p := new(SerialProxyPortType) + *p = x + return p +} + +func (x SerialProxyPortType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SerialProxyPortType) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[1].Descriptor() +} + +func (SerialProxyPortType) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[1] +} + +func (x SerialProxyPortType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SerialProxyPortType.Descriptor instead. +func (SerialProxyPortType) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{1} +} + type EntityCategory int32 const ( @@ -53,11 +154,11 @@ func (x EntityCategory) String() string { } func (EntityCategory) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[0].Descriptor() + return file_api_proto_enumTypes[2].Descriptor() } func (EntityCategory) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[0] + return &file_api_proto_enumTypes[2] } func (x EntityCategory) Number() protoreflect.EnumNumber { @@ -66,9 +167,12 @@ func (x EntityCategory) Number() protoreflect.EnumNumber { // Deprecated: Use EntityCategory.Descriptor instead. func (EntityCategory) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{0} + return file_api_proto_rawDescGZIP(), []int{2} } +// Deprecated in API version 1.1 +// +// Deprecated: Marked as deprecated in api.proto. type LegacyCoverState int32 const ( @@ -99,11 +203,11 @@ func (x LegacyCoverState) String() string { } func (LegacyCoverState) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[1].Descriptor() + return file_api_proto_enumTypes[3].Descriptor() } func (LegacyCoverState) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[1] + return &file_api_proto_enumTypes[3] } func (x LegacyCoverState) Number() protoreflect.EnumNumber { @@ -112,7 +216,7 @@ func (x LegacyCoverState) Number() protoreflect.EnumNumber { // Deprecated: Use LegacyCoverState.Descriptor instead. func (LegacyCoverState) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{1} + return file_api_proto_rawDescGZIP(), []int{3} } type CoverOperation int32 @@ -148,11 +252,11 @@ func (x CoverOperation) String() string { } func (CoverOperation) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[2].Descriptor() + return file_api_proto_enumTypes[4].Descriptor() } func (CoverOperation) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[2] + return &file_api_proto_enumTypes[4] } func (x CoverOperation) Number() protoreflect.EnumNumber { @@ -161,9 +265,12 @@ func (x CoverOperation) Number() protoreflect.EnumNumber { // Deprecated: Use CoverOperation.Descriptor instead. func (CoverOperation) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{2} + return file_api_proto_rawDescGZIP(), []int{4} } +// Deprecated in API version 1.1 +// +// Deprecated: Marked as deprecated in api.proto. type LegacyCoverCommand int32 const ( @@ -197,11 +304,11 @@ func (x LegacyCoverCommand) String() string { } func (LegacyCoverCommand) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[3].Descriptor() + return file_api_proto_enumTypes[5].Descriptor() } func (LegacyCoverCommand) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[3] + return &file_api_proto_enumTypes[5] } func (x LegacyCoverCommand) Number() protoreflect.EnumNumber { @@ -210,9 +317,12 @@ func (x LegacyCoverCommand) Number() protoreflect.EnumNumber { // Deprecated: Use LegacyCoverCommand.Descriptor instead. func (LegacyCoverCommand) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{3} + return file_api_proto_rawDescGZIP(), []int{5} } +// Deprecated in API version 1.6 - only used in deprecated fields +// +// Deprecated: Marked as deprecated in api.proto. type FanSpeed int32 const ( @@ -246,11 +356,11 @@ func (x FanSpeed) String() string { } func (FanSpeed) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[4].Descriptor() + return file_api_proto_enumTypes[6].Descriptor() } func (FanSpeed) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[4] + return &file_api_proto_enumTypes[6] } func (x FanSpeed) Number() protoreflect.EnumNumber { @@ -259,7 +369,7 @@ func (x FanSpeed) Number() protoreflect.EnumNumber { // Deprecated: Use FanSpeed.Descriptor instead. func (FanSpeed) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{4} + return file_api_proto_rawDescGZIP(), []int{6} } type FanDirection int32 @@ -292,11 +402,11 @@ func (x FanDirection) String() string { } func (FanDirection) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[5].Descriptor() + return file_api_proto_enumTypes[7].Descriptor() } func (FanDirection) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[5] + return &file_api_proto_enumTypes[7] } func (x FanDirection) Number() protoreflect.EnumNumber { @@ -305,7 +415,7 @@ func (x FanDirection) Number() protoreflect.EnumNumber { // Deprecated: Use FanDirection.Descriptor instead. func (FanDirection) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{5} + return file_api_proto_rawDescGZIP(), []int{7} } // ==================== LIGHT ==================== @@ -314,7 +424,8 @@ type ColorMode int32 const ( ColorMode_COLOR_MODE_UNKNOWN ColorMode = 0 ColorMode_COLOR_MODE_ON_OFF ColorMode = 1 - ColorMode_COLOR_MODE_BRIGHTNESS ColorMode = 2 + ColorMode_COLOR_MODE_LEGACY_BRIGHTNESS ColorMode = 2 + ColorMode_COLOR_MODE_BRIGHTNESS ColorMode = 3 ColorMode_COLOR_MODE_WHITE ColorMode = 7 ColorMode_COLOR_MODE_COLOR_TEMPERATURE ColorMode = 11 ColorMode_COLOR_MODE_COLD_WARM_WHITE ColorMode = 19 @@ -329,7 +440,8 @@ var ( ColorMode_name = map[int32]string{ 0: "COLOR_MODE_UNKNOWN", 1: "COLOR_MODE_ON_OFF", - 2: "COLOR_MODE_BRIGHTNESS", + 2: "COLOR_MODE_LEGACY_BRIGHTNESS", + 3: "COLOR_MODE_BRIGHTNESS", 7: "COLOR_MODE_WHITE", 11: "COLOR_MODE_COLOR_TEMPERATURE", 19: "COLOR_MODE_COLD_WARM_WHITE", @@ -341,7 +453,8 @@ var ( ColorMode_value = map[string]int32{ "COLOR_MODE_UNKNOWN": 0, "COLOR_MODE_ON_OFF": 1, - "COLOR_MODE_BRIGHTNESS": 2, + "COLOR_MODE_LEGACY_BRIGHTNESS": 2, + "COLOR_MODE_BRIGHTNESS": 3, "COLOR_MODE_WHITE": 7, "COLOR_MODE_COLOR_TEMPERATURE": 11, "COLOR_MODE_COLD_WARM_WHITE": 19, @@ -363,11 +476,11 @@ func (x ColorMode) String() string { } func (ColorMode) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[6].Descriptor() + return file_api_proto_enumTypes[8].Descriptor() } func (ColorMode) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[6] + return &file_api_proto_enumTypes[8] } func (x ColorMode) Number() protoreflect.EnumNumber { @@ -376,17 +489,18 @@ func (x ColorMode) Number() protoreflect.EnumNumber { // Deprecated: Use ColorMode.Descriptor instead. func (ColorMode) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{6} + return file_api_proto_rawDescGZIP(), []int{8} } // ==================== SENSOR ==================== type SensorStateClass int32 const ( - SensorStateClass_STATE_CLASS_NONE SensorStateClass = 0 - SensorStateClass_STATE_CLASS_MEASUREMENT SensorStateClass = 1 - SensorStateClass_STATE_CLASS_TOTAL_INCREASING SensorStateClass = 2 - SensorStateClass_STATE_CLASS_TOTAL SensorStateClass = 3 + SensorStateClass_STATE_CLASS_NONE SensorStateClass = 0 + SensorStateClass_STATE_CLASS_MEASUREMENT SensorStateClass = 1 + SensorStateClass_STATE_CLASS_TOTAL_INCREASING SensorStateClass = 2 + SensorStateClass_STATE_CLASS_TOTAL SensorStateClass = 3 + SensorStateClass_STATE_CLASS_MEASUREMENT_ANGLE SensorStateClass = 4 ) // Enum value maps for SensorStateClass. @@ -396,12 +510,14 @@ var ( 1: "STATE_CLASS_MEASUREMENT", 2: "STATE_CLASS_TOTAL_INCREASING", 3: "STATE_CLASS_TOTAL", + 4: "STATE_CLASS_MEASUREMENT_ANGLE", } SensorStateClass_value = map[string]int32{ - "STATE_CLASS_NONE": 0, - "STATE_CLASS_MEASUREMENT": 1, - "STATE_CLASS_TOTAL_INCREASING": 2, - "STATE_CLASS_TOTAL": 3, + "STATE_CLASS_NONE": 0, + "STATE_CLASS_MEASUREMENT": 1, + "STATE_CLASS_TOTAL_INCREASING": 2, + "STATE_CLASS_TOTAL": 3, + "STATE_CLASS_MEASUREMENT_ANGLE": 4, } ) @@ -416,11 +532,11 @@ func (x SensorStateClass) String() string { } func (SensorStateClass) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[7].Descriptor() + return file_api_proto_enumTypes[9].Descriptor() } func (SensorStateClass) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[7] + return &file_api_proto_enumTypes[9] } func (x SensorStateClass) Number() protoreflect.EnumNumber { @@ -429,9 +545,12 @@ func (x SensorStateClass) Number() protoreflect.EnumNumber { // Deprecated: Use SensorStateClass.Descriptor instead. func (SensorStateClass) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{7} + return file_api_proto_rawDescGZIP(), []int{9} } +// Deprecated in API version 1.5 +// +// Deprecated: Marked as deprecated in api.proto. type SensorLastResetType int32 const ( @@ -465,11 +584,11 @@ func (x SensorLastResetType) String() string { } func (SensorLastResetType) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[8].Descriptor() + return file_api_proto_enumTypes[10].Descriptor() } func (SensorLastResetType) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[8] + return &file_api_proto_enumTypes[10] } func (x SensorLastResetType) Number() protoreflect.EnumNumber { @@ -478,7 +597,7 @@ func (x SensorLastResetType) Number() protoreflect.EnumNumber { // Deprecated: Use SensorLastResetType.Descriptor instead. func (SensorLastResetType) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{8} + return file_api_proto_rawDescGZIP(), []int{10} } // ==================== SUBSCRIBE LOGS ==================== @@ -530,11 +649,11 @@ func (x LogLevel) String() string { } func (LogLevel) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[9].Descriptor() + return file_api_proto_enumTypes[11].Descriptor() } func (LogLevel) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[9] + return &file_api_proto_enumTypes[11] } func (x LogLevel) Number() protoreflect.EnumNumber { @@ -543,7 +662,59 @@ func (x LogLevel) Number() protoreflect.EnumNumber { // Deprecated: Use LogLevel.Descriptor instead. func (LogLevel) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{9} + return file_api_proto_rawDescGZIP(), []int{11} +} + +type DSTRuleType int32 + +const ( + DSTRuleType_DST_RULE_TYPE_NONE DSTRuleType = 0 + DSTRuleType_DST_RULE_TYPE_MONTH_WEEK_DAY DSTRuleType = 1 + DSTRuleType_DST_RULE_TYPE_JULIAN_NO_LEAP DSTRuleType = 2 + DSTRuleType_DST_RULE_TYPE_DAY_OF_YEAR DSTRuleType = 3 +) + +// Enum value maps for DSTRuleType. +var ( + DSTRuleType_name = map[int32]string{ + 0: "DST_RULE_TYPE_NONE", + 1: "DST_RULE_TYPE_MONTH_WEEK_DAY", + 2: "DST_RULE_TYPE_JULIAN_NO_LEAP", + 3: "DST_RULE_TYPE_DAY_OF_YEAR", + } + DSTRuleType_value = map[string]int32{ + "DST_RULE_TYPE_NONE": 0, + "DST_RULE_TYPE_MONTH_WEEK_DAY": 1, + "DST_RULE_TYPE_JULIAN_NO_LEAP": 2, + "DST_RULE_TYPE_DAY_OF_YEAR": 3, + } +) + +func (x DSTRuleType) Enum() *DSTRuleType { + p := new(DSTRuleType) + *p = x + return p +} + +func (x DSTRuleType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DSTRuleType) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[12].Descriptor() +} + +func (DSTRuleType) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[12] +} + +func (x DSTRuleType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use DSTRuleType.Descriptor instead. +func (DSTRuleType) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{12} } // ==================== USER-DEFINES SERVICES ==================== @@ -595,11 +766,11 @@ func (x ServiceArgType) String() string { } func (ServiceArgType) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[10].Descriptor() + return file_api_proto_enumTypes[13].Descriptor() } func (ServiceArgType) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[10] + return &file_api_proto_enumTypes[13] } func (x ServiceArgType) Number() protoreflect.EnumNumber { @@ -608,7 +779,111 @@ func (x ServiceArgType) Number() protoreflect.EnumNumber { // Deprecated: Use ServiceArgType.Descriptor instead. func (ServiceArgType) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{10} + return file_api_proto_rawDescGZIP(), []int{13} +} + +type SupportsResponseType int32 + +const ( + SupportsResponseType_SUPPORTS_RESPONSE_NONE SupportsResponseType = 0 + SupportsResponseType_SUPPORTS_RESPONSE_OPTIONAL SupportsResponseType = 1 + SupportsResponseType_SUPPORTS_RESPONSE_ONLY SupportsResponseType = 2 + // Status-only response - reports success/error without data payload + // Value is higher to avoid conflicts with future Home Assistant values + SupportsResponseType_SUPPORTS_RESPONSE_STATUS SupportsResponseType = 100 +) + +// Enum value maps for SupportsResponseType. +var ( + SupportsResponseType_name = map[int32]string{ + 0: "SUPPORTS_RESPONSE_NONE", + 1: "SUPPORTS_RESPONSE_OPTIONAL", + 2: "SUPPORTS_RESPONSE_ONLY", + 100: "SUPPORTS_RESPONSE_STATUS", + } + SupportsResponseType_value = map[string]int32{ + "SUPPORTS_RESPONSE_NONE": 0, + "SUPPORTS_RESPONSE_OPTIONAL": 1, + "SUPPORTS_RESPONSE_ONLY": 2, + "SUPPORTS_RESPONSE_STATUS": 100, + } +) + +func (x SupportsResponseType) Enum() *SupportsResponseType { + p := new(SupportsResponseType) + *p = x + return p +} + +func (x SupportsResponseType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SupportsResponseType) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[14].Descriptor() +} + +func (SupportsResponseType) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[14] +} + +func (x SupportsResponseType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SupportsResponseType.Descriptor instead. +func (SupportsResponseType) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{14} +} + +// ==================== TEMPERATURE UNIT ==================== +type TemperatureUnit int32 + +const ( + TemperatureUnit_TEMPERATURE_UNIT_CELSIUS TemperatureUnit = 0 + TemperatureUnit_TEMPERATURE_UNIT_FAHRENHEIT TemperatureUnit = 1 + TemperatureUnit_TEMPERATURE_UNIT_KELVIN TemperatureUnit = 2 +) + +// Enum value maps for TemperatureUnit. +var ( + TemperatureUnit_name = map[int32]string{ + 0: "TEMPERATURE_UNIT_CELSIUS", + 1: "TEMPERATURE_UNIT_FAHRENHEIT", + 2: "TEMPERATURE_UNIT_KELVIN", + } + TemperatureUnit_value = map[string]int32{ + "TEMPERATURE_UNIT_CELSIUS": 0, + "TEMPERATURE_UNIT_FAHRENHEIT": 1, + "TEMPERATURE_UNIT_KELVIN": 2, + } +) + +func (x TemperatureUnit) Enum() *TemperatureUnit { + p := new(TemperatureUnit) + *p = x + return p +} + +func (x TemperatureUnit) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TemperatureUnit) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[15].Descriptor() +} + +func (TemperatureUnit) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[15] +} + +func (x TemperatureUnit) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TemperatureUnit.Descriptor instead. +func (TemperatureUnit) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{15} } // ==================== CLIMATE ==================== @@ -657,11 +932,11 @@ func (x ClimateMode) String() string { } func (ClimateMode) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[11].Descriptor() + return file_api_proto_enumTypes[16].Descriptor() } func (ClimateMode) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[11] + return &file_api_proto_enumTypes[16] } func (x ClimateMode) Number() protoreflect.EnumNumber { @@ -670,7 +945,7 @@ func (x ClimateMode) Number() protoreflect.EnumNumber { // Deprecated: Use ClimateMode.Descriptor instead. func (ClimateMode) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{11} + return file_api_proto_rawDescGZIP(), []int{16} } type ClimateFanMode int32 @@ -727,11 +1002,11 @@ func (x ClimateFanMode) String() string { } func (ClimateFanMode) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[12].Descriptor() + return file_api_proto_enumTypes[17].Descriptor() } func (ClimateFanMode) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[12] + return &file_api_proto_enumTypes[17] } func (x ClimateFanMode) Number() protoreflect.EnumNumber { @@ -740,7 +1015,7 @@ func (x ClimateFanMode) Number() protoreflect.EnumNumber { // Deprecated: Use ClimateFanMode.Descriptor instead. func (ClimateFanMode) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{12} + return file_api_proto_rawDescGZIP(), []int{17} } type ClimateSwingMode int32 @@ -779,11 +1054,11 @@ func (x ClimateSwingMode) String() string { } func (ClimateSwingMode) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[13].Descriptor() + return file_api_proto_enumTypes[18].Descriptor() } func (ClimateSwingMode) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[13] + return &file_api_proto_enumTypes[18] } func (x ClimateSwingMode) Number() protoreflect.EnumNumber { @@ -792,7 +1067,7 @@ func (x ClimateSwingMode) Number() protoreflect.EnumNumber { // Deprecated: Use ClimateSwingMode.Descriptor instead. func (ClimateSwingMode) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{13} + return file_api_proto_rawDescGZIP(), []int{18} } type ClimateAction int32 @@ -800,11 +1075,12 @@ type ClimateAction int32 const ( ClimateAction_CLIMATE_ACTION_OFF ClimateAction = 0 // values same as mode for readability - ClimateAction_CLIMATE_ACTION_COOLING ClimateAction = 2 - ClimateAction_CLIMATE_ACTION_HEATING ClimateAction = 3 - ClimateAction_CLIMATE_ACTION_IDLE ClimateAction = 4 - ClimateAction_CLIMATE_ACTION_DRYING ClimateAction = 5 - ClimateAction_CLIMATE_ACTION_FAN ClimateAction = 6 + ClimateAction_CLIMATE_ACTION_COOLING ClimateAction = 2 + ClimateAction_CLIMATE_ACTION_HEATING ClimateAction = 3 + ClimateAction_CLIMATE_ACTION_IDLE ClimateAction = 4 + ClimateAction_CLIMATE_ACTION_DRYING ClimateAction = 5 + ClimateAction_CLIMATE_ACTION_FAN ClimateAction = 6 + ClimateAction_CLIMATE_ACTION_DEFROSTING ClimateAction = 7 ) // Enum value maps for ClimateAction. @@ -816,14 +1092,16 @@ var ( 4: "CLIMATE_ACTION_IDLE", 5: "CLIMATE_ACTION_DRYING", 6: "CLIMATE_ACTION_FAN", + 7: "CLIMATE_ACTION_DEFROSTING", } ClimateAction_value = map[string]int32{ - "CLIMATE_ACTION_OFF": 0, - "CLIMATE_ACTION_COOLING": 2, - "CLIMATE_ACTION_HEATING": 3, - "CLIMATE_ACTION_IDLE": 4, - "CLIMATE_ACTION_DRYING": 5, - "CLIMATE_ACTION_FAN": 6, + "CLIMATE_ACTION_OFF": 0, + "CLIMATE_ACTION_COOLING": 2, + "CLIMATE_ACTION_HEATING": 3, + "CLIMATE_ACTION_IDLE": 4, + "CLIMATE_ACTION_DRYING": 5, + "CLIMATE_ACTION_FAN": 6, + "CLIMATE_ACTION_DEFROSTING": 7, } ) @@ -838,11 +1116,11 @@ func (x ClimateAction) String() string { } func (ClimateAction) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[14].Descriptor() + return file_api_proto_enumTypes[19].Descriptor() } func (ClimateAction) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[14] + return &file_api_proto_enumTypes[19] } func (x ClimateAction) Number() protoreflect.EnumNumber { @@ -851,7 +1129,7 @@ func (x ClimateAction) Number() protoreflect.EnumNumber { // Deprecated: Use ClimateAction.Descriptor instead. func (ClimateAction) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{14} + return file_api_proto_rawDescGZIP(), []int{19} } type ClimatePreset int32 @@ -902,11 +1180,11 @@ func (x ClimatePreset) String() string { } func (ClimatePreset) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[15].Descriptor() + return file_api_proto_enumTypes[20].Descriptor() } func (ClimatePreset) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[15] + return &file_api_proto_enumTypes[20] } func (x ClimatePreset) Number() protoreflect.EnumNumber { @@ -915,48 +1193,176 @@ func (x ClimatePreset) Number() protoreflect.EnumNumber { // Deprecated: Use ClimatePreset.Descriptor instead. func (ClimatePreset) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{15} + return file_api_proto_rawDescGZIP(), []int{20} } -// ==================== NUMBER ==================== -type NumberMode int32 +// ==================== WATER_HEATER ==================== +type WaterHeaterMode int32 const ( - NumberMode_NUMBER_MODE_AUTO NumberMode = 0 - NumberMode_NUMBER_MODE_BOX NumberMode = 1 - NumberMode_NUMBER_MODE_SLIDER NumberMode = 2 + WaterHeaterMode_WATER_HEATER_MODE_OFF WaterHeaterMode = 0 + WaterHeaterMode_WATER_HEATER_MODE_ECO WaterHeaterMode = 1 + WaterHeaterMode_WATER_HEATER_MODE_ELECTRIC WaterHeaterMode = 2 + WaterHeaterMode_WATER_HEATER_MODE_PERFORMANCE WaterHeaterMode = 3 + WaterHeaterMode_WATER_HEATER_MODE_HIGH_DEMAND WaterHeaterMode = 4 + WaterHeaterMode_WATER_HEATER_MODE_HEAT_PUMP WaterHeaterMode = 5 + WaterHeaterMode_WATER_HEATER_MODE_GAS WaterHeaterMode = 6 ) -// Enum value maps for NumberMode. +// Enum value maps for WaterHeaterMode. var ( - NumberMode_name = map[int32]string{ - 0: "NUMBER_MODE_AUTO", - 1: "NUMBER_MODE_BOX", - 2: "NUMBER_MODE_SLIDER", - } - NumberMode_value = map[string]int32{ - "NUMBER_MODE_AUTO": 0, - "NUMBER_MODE_BOX": 1, - "NUMBER_MODE_SLIDER": 2, + WaterHeaterMode_name = map[int32]string{ + 0: "WATER_HEATER_MODE_OFF", + 1: "WATER_HEATER_MODE_ECO", + 2: "WATER_HEATER_MODE_ELECTRIC", + 3: "WATER_HEATER_MODE_PERFORMANCE", + 4: "WATER_HEATER_MODE_HIGH_DEMAND", + 5: "WATER_HEATER_MODE_HEAT_PUMP", + 6: "WATER_HEATER_MODE_GAS", + } + WaterHeaterMode_value = map[string]int32{ + "WATER_HEATER_MODE_OFF": 0, + "WATER_HEATER_MODE_ECO": 1, + "WATER_HEATER_MODE_ELECTRIC": 2, + "WATER_HEATER_MODE_PERFORMANCE": 3, + "WATER_HEATER_MODE_HIGH_DEMAND": 4, + "WATER_HEATER_MODE_HEAT_PUMP": 5, + "WATER_HEATER_MODE_GAS": 6, } ) -func (x NumberMode) Enum() *NumberMode { - p := new(NumberMode) +func (x WaterHeaterMode) Enum() *WaterHeaterMode { + p := new(WaterHeaterMode) *p = x return p } -func (x NumberMode) String() string { +func (x WaterHeaterMode) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (NumberMode) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[16].Descriptor() +func (WaterHeaterMode) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[21].Descriptor() } -func (NumberMode) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[16] +func (WaterHeaterMode) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[21] +} + +func (x WaterHeaterMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use WaterHeaterMode.Descriptor instead. +func (WaterHeaterMode) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{21} +} + +// Bitmask for WaterHeaterCommandRequest.has_fields +type WaterHeaterCommandHasField int32 + +const ( + WaterHeaterCommandHasField_WATER_HEATER_COMMAND_HAS_NONE WaterHeaterCommandHasField = 0 + WaterHeaterCommandHasField_WATER_HEATER_COMMAND_HAS_MODE WaterHeaterCommandHasField = 1 + WaterHeaterCommandHasField_WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE WaterHeaterCommandHasField = 2 + // Deprecated: Marked as deprecated in api.proto. + WaterHeaterCommandHasField_WATER_HEATER_COMMAND_HAS_STATE WaterHeaterCommandHasField = 4 + WaterHeaterCommandHasField_WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_LOW WaterHeaterCommandHasField = 8 + WaterHeaterCommandHasField_WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_HIGH WaterHeaterCommandHasField = 16 + WaterHeaterCommandHasField_WATER_HEATER_COMMAND_HAS_ON_STATE WaterHeaterCommandHasField = 32 + WaterHeaterCommandHasField_WATER_HEATER_COMMAND_HAS_AWAY_STATE WaterHeaterCommandHasField = 64 +) + +// Enum value maps for WaterHeaterCommandHasField. +var ( + WaterHeaterCommandHasField_name = map[int32]string{ + 0: "WATER_HEATER_COMMAND_HAS_NONE", + 1: "WATER_HEATER_COMMAND_HAS_MODE", + 2: "WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE", + 4: "WATER_HEATER_COMMAND_HAS_STATE", + 8: "WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_LOW", + 16: "WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_HIGH", + 32: "WATER_HEATER_COMMAND_HAS_ON_STATE", + 64: "WATER_HEATER_COMMAND_HAS_AWAY_STATE", + } + WaterHeaterCommandHasField_value = map[string]int32{ + "WATER_HEATER_COMMAND_HAS_NONE": 0, + "WATER_HEATER_COMMAND_HAS_MODE": 1, + "WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE": 2, + "WATER_HEATER_COMMAND_HAS_STATE": 4, + "WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_LOW": 8, + "WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_HIGH": 16, + "WATER_HEATER_COMMAND_HAS_ON_STATE": 32, + "WATER_HEATER_COMMAND_HAS_AWAY_STATE": 64, + } +) + +func (x WaterHeaterCommandHasField) Enum() *WaterHeaterCommandHasField { + p := new(WaterHeaterCommandHasField) + *p = x + return p +} + +func (x WaterHeaterCommandHasField) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (WaterHeaterCommandHasField) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[22].Descriptor() +} + +func (WaterHeaterCommandHasField) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[22] +} + +func (x WaterHeaterCommandHasField) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use WaterHeaterCommandHasField.Descriptor instead. +func (WaterHeaterCommandHasField) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{22} +} + +// ==================== NUMBER ==================== +type NumberMode int32 + +const ( + NumberMode_NUMBER_MODE_AUTO NumberMode = 0 + NumberMode_NUMBER_MODE_BOX NumberMode = 1 + NumberMode_NUMBER_MODE_SLIDER NumberMode = 2 +) + +// Enum value maps for NumberMode. +var ( + NumberMode_name = map[int32]string{ + 0: "NUMBER_MODE_AUTO", + 1: "NUMBER_MODE_BOX", + 2: "NUMBER_MODE_SLIDER", + } + NumberMode_value = map[string]int32{ + "NUMBER_MODE_AUTO": 0, + "NUMBER_MODE_BOX": 1, + "NUMBER_MODE_SLIDER": 2, + } +) + +func (x NumberMode) Enum() *NumberMode { + p := new(NumberMode) + *p = x + return p +} + +func (x NumberMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NumberMode) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[23].Descriptor() +} + +func (NumberMode) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[23] } func (x NumberMode) Number() protoreflect.EnumNumber { @@ -965,7 +1371,7 @@ func (x NumberMode) Number() protoreflect.EnumNumber { // Deprecated: Use NumberMode.Descriptor instead. func (NumberMode) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{16} + return file_api_proto_rawDescGZIP(), []int{23} } // ==================== LOCK ==================== @@ -978,6 +1384,8 @@ const ( LockState_LOCK_STATE_JAMMED LockState = 3 LockState_LOCK_STATE_LOCKING LockState = 4 LockState_LOCK_STATE_UNLOCKING LockState = 5 + LockState_LOCK_STATE_OPENING LockState = 6 + LockState_LOCK_STATE_OPEN LockState = 7 ) // Enum value maps for LockState. @@ -989,6 +1397,8 @@ var ( 3: "LOCK_STATE_JAMMED", 4: "LOCK_STATE_LOCKING", 5: "LOCK_STATE_UNLOCKING", + 6: "LOCK_STATE_OPENING", + 7: "LOCK_STATE_OPEN", } LockState_value = map[string]int32{ "LOCK_STATE_NONE": 0, @@ -997,6 +1407,8 @@ var ( "LOCK_STATE_JAMMED": 3, "LOCK_STATE_LOCKING": 4, "LOCK_STATE_UNLOCKING": 5, + "LOCK_STATE_OPENING": 6, + "LOCK_STATE_OPEN": 7, } ) @@ -1011,11 +1423,11 @@ func (x LockState) String() string { } func (LockState) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[17].Descriptor() + return file_api_proto_enumTypes[24].Descriptor() } func (LockState) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[17] + return &file_api_proto_enumTypes[24] } func (x LockState) Number() protoreflect.EnumNumber { @@ -1024,7 +1436,7 @@ func (x LockState) Number() protoreflect.EnumNumber { // Deprecated: Use LockState.Descriptor instead. func (LockState) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{17} + return file_api_proto_rawDescGZIP(), []int{24} } type LockCommand int32 @@ -1060,11 +1472,11 @@ func (x LockCommand) String() string { } func (LockCommand) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[18].Descriptor() + return file_api_proto_enumTypes[25].Descriptor() } func (LockCommand) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[18] + return &file_api_proto_enumTypes[25] } func (x LockCommand) Number() protoreflect.EnumNumber { @@ -1073,17 +1485,20 @@ func (x LockCommand) Number() protoreflect.EnumNumber { // Deprecated: Use LockCommand.Descriptor instead. func (LockCommand) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{18} + return file_api_proto_rawDescGZIP(), []int{25} } // ==================== MEDIA PLAYER ==================== type MediaPlayerState int32 const ( - MediaPlayerState_MEDIA_PLAYER_STATE_NONE MediaPlayerState = 0 - MediaPlayerState_MEDIA_PLAYER_STATE_IDLE MediaPlayerState = 1 - MediaPlayerState_MEDIA_PLAYER_STATE_PLAYING MediaPlayerState = 2 - MediaPlayerState_MEDIA_PLAYER_STATE_PAUSED MediaPlayerState = 3 + MediaPlayerState_MEDIA_PLAYER_STATE_NONE MediaPlayerState = 0 + MediaPlayerState_MEDIA_PLAYER_STATE_IDLE MediaPlayerState = 1 + MediaPlayerState_MEDIA_PLAYER_STATE_PLAYING MediaPlayerState = 2 + MediaPlayerState_MEDIA_PLAYER_STATE_PAUSED MediaPlayerState = 3 + MediaPlayerState_MEDIA_PLAYER_STATE_ANNOUNCING MediaPlayerState = 4 + MediaPlayerState_MEDIA_PLAYER_STATE_OFF MediaPlayerState = 5 + MediaPlayerState_MEDIA_PLAYER_STATE_ON MediaPlayerState = 6 ) // Enum value maps for MediaPlayerState. @@ -1093,12 +1508,18 @@ var ( 1: "MEDIA_PLAYER_STATE_IDLE", 2: "MEDIA_PLAYER_STATE_PLAYING", 3: "MEDIA_PLAYER_STATE_PAUSED", + 4: "MEDIA_PLAYER_STATE_ANNOUNCING", + 5: "MEDIA_PLAYER_STATE_OFF", + 6: "MEDIA_PLAYER_STATE_ON", } MediaPlayerState_value = map[string]int32{ - "MEDIA_PLAYER_STATE_NONE": 0, - "MEDIA_PLAYER_STATE_IDLE": 1, - "MEDIA_PLAYER_STATE_PLAYING": 2, - "MEDIA_PLAYER_STATE_PAUSED": 3, + "MEDIA_PLAYER_STATE_NONE": 0, + "MEDIA_PLAYER_STATE_IDLE": 1, + "MEDIA_PLAYER_STATE_PLAYING": 2, + "MEDIA_PLAYER_STATE_PAUSED": 3, + "MEDIA_PLAYER_STATE_ANNOUNCING": 4, + "MEDIA_PLAYER_STATE_OFF": 5, + "MEDIA_PLAYER_STATE_ON": 6, } ) @@ -1113,11 +1534,11 @@ func (x MediaPlayerState) String() string { } func (MediaPlayerState) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[19].Descriptor() + return file_api_proto_enumTypes[26].Descriptor() } func (MediaPlayerState) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[19] + return &file_api_proto_enumTypes[26] } func (x MediaPlayerState) Number() protoreflect.EnumNumber { @@ -1126,34 +1547,61 @@ func (x MediaPlayerState) Number() protoreflect.EnumNumber { // Deprecated: Use MediaPlayerState.Descriptor instead. func (MediaPlayerState) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{19} + return file_api_proto_rawDescGZIP(), []int{26} } type MediaPlayerCommand int32 const ( - MediaPlayerCommand_MEDIA_PLAYER_COMMAND_PLAY MediaPlayerCommand = 0 - MediaPlayerCommand_MEDIA_PLAYER_COMMAND_PAUSE MediaPlayerCommand = 1 - MediaPlayerCommand_MEDIA_PLAYER_COMMAND_STOP MediaPlayerCommand = 2 - MediaPlayerCommand_MEDIA_PLAYER_COMMAND_MUTE MediaPlayerCommand = 3 - MediaPlayerCommand_MEDIA_PLAYER_COMMAND_UNMUTE MediaPlayerCommand = 4 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_PLAY MediaPlayerCommand = 0 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_PAUSE MediaPlayerCommand = 1 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_STOP MediaPlayerCommand = 2 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_MUTE MediaPlayerCommand = 3 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_UNMUTE MediaPlayerCommand = 4 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_TOGGLE MediaPlayerCommand = 5 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_VOLUME_UP MediaPlayerCommand = 6 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_VOLUME_DOWN MediaPlayerCommand = 7 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_ENQUEUE MediaPlayerCommand = 8 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_REPEAT_ONE MediaPlayerCommand = 9 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_REPEAT_OFF MediaPlayerCommand = 10 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_CLEAR_PLAYLIST MediaPlayerCommand = 11 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_TURN_ON MediaPlayerCommand = 12 + MediaPlayerCommand_MEDIA_PLAYER_COMMAND_TURN_OFF MediaPlayerCommand = 13 ) // Enum value maps for MediaPlayerCommand. var ( MediaPlayerCommand_name = map[int32]string{ - 0: "MEDIA_PLAYER_COMMAND_PLAY", - 1: "MEDIA_PLAYER_COMMAND_PAUSE", - 2: "MEDIA_PLAYER_COMMAND_STOP", - 3: "MEDIA_PLAYER_COMMAND_MUTE", - 4: "MEDIA_PLAYER_COMMAND_UNMUTE", + 0: "MEDIA_PLAYER_COMMAND_PLAY", + 1: "MEDIA_PLAYER_COMMAND_PAUSE", + 2: "MEDIA_PLAYER_COMMAND_STOP", + 3: "MEDIA_PLAYER_COMMAND_MUTE", + 4: "MEDIA_PLAYER_COMMAND_UNMUTE", + 5: "MEDIA_PLAYER_COMMAND_TOGGLE", + 6: "MEDIA_PLAYER_COMMAND_VOLUME_UP", + 7: "MEDIA_PLAYER_COMMAND_VOLUME_DOWN", + 8: "MEDIA_PLAYER_COMMAND_ENQUEUE", + 9: "MEDIA_PLAYER_COMMAND_REPEAT_ONE", + 10: "MEDIA_PLAYER_COMMAND_REPEAT_OFF", + 11: "MEDIA_PLAYER_COMMAND_CLEAR_PLAYLIST", + 12: "MEDIA_PLAYER_COMMAND_TURN_ON", + 13: "MEDIA_PLAYER_COMMAND_TURN_OFF", } MediaPlayerCommand_value = map[string]int32{ - "MEDIA_PLAYER_COMMAND_PLAY": 0, - "MEDIA_PLAYER_COMMAND_PAUSE": 1, - "MEDIA_PLAYER_COMMAND_STOP": 2, - "MEDIA_PLAYER_COMMAND_MUTE": 3, - "MEDIA_PLAYER_COMMAND_UNMUTE": 4, + "MEDIA_PLAYER_COMMAND_PLAY": 0, + "MEDIA_PLAYER_COMMAND_PAUSE": 1, + "MEDIA_PLAYER_COMMAND_STOP": 2, + "MEDIA_PLAYER_COMMAND_MUTE": 3, + "MEDIA_PLAYER_COMMAND_UNMUTE": 4, + "MEDIA_PLAYER_COMMAND_TOGGLE": 5, + "MEDIA_PLAYER_COMMAND_VOLUME_UP": 6, + "MEDIA_PLAYER_COMMAND_VOLUME_DOWN": 7, + "MEDIA_PLAYER_COMMAND_ENQUEUE": 8, + "MEDIA_PLAYER_COMMAND_REPEAT_ONE": 9, + "MEDIA_PLAYER_COMMAND_REPEAT_OFF": 10, + "MEDIA_PLAYER_COMMAND_CLEAR_PLAYLIST": 11, + "MEDIA_PLAYER_COMMAND_TURN_ON": 12, + "MEDIA_PLAYER_COMMAND_TURN_OFF": 13, } ) @@ -1168,11 +1616,11 @@ func (x MediaPlayerCommand) String() string { } func (MediaPlayerCommand) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[20].Descriptor() + return file_api_proto_enumTypes[27].Descriptor() } func (MediaPlayerCommand) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[20] + return &file_api_proto_enumTypes[27] } func (x MediaPlayerCommand) Number() protoreflect.EnumNumber { @@ -1181,13 +1629,60 @@ func (x MediaPlayerCommand) Number() protoreflect.EnumNumber { // Deprecated: Use MediaPlayerCommand.Descriptor instead. func (MediaPlayerCommand) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{20} + return file_api_proto_rawDescGZIP(), []int{27} +} + +type MediaPlayerFormatPurpose int32 + +const ( + MediaPlayerFormatPurpose_MEDIA_PLAYER_FORMAT_PURPOSE_DEFAULT MediaPlayerFormatPurpose = 0 + MediaPlayerFormatPurpose_MEDIA_PLAYER_FORMAT_PURPOSE_ANNOUNCEMENT MediaPlayerFormatPurpose = 1 +) + +// Enum value maps for MediaPlayerFormatPurpose. +var ( + MediaPlayerFormatPurpose_name = map[int32]string{ + 0: "MEDIA_PLAYER_FORMAT_PURPOSE_DEFAULT", + 1: "MEDIA_PLAYER_FORMAT_PURPOSE_ANNOUNCEMENT", + } + MediaPlayerFormatPurpose_value = map[string]int32{ + "MEDIA_PLAYER_FORMAT_PURPOSE_DEFAULT": 0, + "MEDIA_PLAYER_FORMAT_PURPOSE_ANNOUNCEMENT": 1, + } +) + +func (x MediaPlayerFormatPurpose) Enum() *MediaPlayerFormatPurpose { + p := new(MediaPlayerFormatPurpose) + *p = x + return p +} + +func (x MediaPlayerFormatPurpose) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MediaPlayerFormatPurpose) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[28].Descriptor() +} + +func (MediaPlayerFormatPurpose) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[28] +} + +func (x MediaPlayerFormatPurpose) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use MediaPlayerFormatPurpose.Descriptor instead. +func (MediaPlayerFormatPurpose) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{28} } type BluetoothDeviceRequestType int32 const ( - BluetoothDeviceRequestType_BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT BluetoothDeviceRequestType = 0 + // Deprecated: Marked as deprecated in api.proto. + BluetoothDeviceRequestType_BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT BluetoothDeviceRequestType = 0 // V1 removed, use V3 variants BluetoothDeviceRequestType_BLUETOOTH_DEVICE_REQUEST_TYPE_DISCONNECT BluetoothDeviceRequestType = 1 BluetoothDeviceRequestType_BLUETOOTH_DEVICE_REQUEST_TYPE_PAIR BluetoothDeviceRequestType = 2 BluetoothDeviceRequestType_BLUETOOTH_DEVICE_REQUEST_TYPE_UNPAIR BluetoothDeviceRequestType = 3 @@ -1229,11 +1724,11 @@ func (x BluetoothDeviceRequestType) String() string { } func (BluetoothDeviceRequestType) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[21].Descriptor() + return file_api_proto_enumTypes[29].Descriptor() } func (BluetoothDeviceRequestType) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[21] + return &file_api_proto_enumTypes[29] } func (x BluetoothDeviceRequestType) Number() protoreflect.EnumNumber { @@ -1242,10 +1737,114 @@ func (x BluetoothDeviceRequestType) Number() protoreflect.EnumNumber { // Deprecated: Use BluetoothDeviceRequestType.Descriptor instead. func (BluetoothDeviceRequestType) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{21} + return file_api_proto_rawDescGZIP(), []int{29} +} + +type BluetoothScannerState int32 + +const ( + BluetoothScannerState_BLUETOOTH_SCANNER_STATE_IDLE BluetoothScannerState = 0 + BluetoothScannerState_BLUETOOTH_SCANNER_STATE_STARTING BluetoothScannerState = 1 + BluetoothScannerState_BLUETOOTH_SCANNER_STATE_RUNNING BluetoothScannerState = 2 + BluetoothScannerState_BLUETOOTH_SCANNER_STATE_FAILED BluetoothScannerState = 3 + BluetoothScannerState_BLUETOOTH_SCANNER_STATE_STOPPING BluetoothScannerState = 4 + BluetoothScannerState_BLUETOOTH_SCANNER_STATE_STOPPED BluetoothScannerState = 5 +) + +// Enum value maps for BluetoothScannerState. +var ( + BluetoothScannerState_name = map[int32]string{ + 0: "BLUETOOTH_SCANNER_STATE_IDLE", + 1: "BLUETOOTH_SCANNER_STATE_STARTING", + 2: "BLUETOOTH_SCANNER_STATE_RUNNING", + 3: "BLUETOOTH_SCANNER_STATE_FAILED", + 4: "BLUETOOTH_SCANNER_STATE_STOPPING", + 5: "BLUETOOTH_SCANNER_STATE_STOPPED", + } + BluetoothScannerState_value = map[string]int32{ + "BLUETOOTH_SCANNER_STATE_IDLE": 0, + "BLUETOOTH_SCANNER_STATE_STARTING": 1, + "BLUETOOTH_SCANNER_STATE_RUNNING": 2, + "BLUETOOTH_SCANNER_STATE_FAILED": 3, + "BLUETOOTH_SCANNER_STATE_STOPPING": 4, + "BLUETOOTH_SCANNER_STATE_STOPPED": 5, + } +) + +func (x BluetoothScannerState) Enum() *BluetoothScannerState { + p := new(BluetoothScannerState) + *p = x + return p +} + +func (x BluetoothScannerState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BluetoothScannerState) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[30].Descriptor() +} + +func (BluetoothScannerState) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[30] +} + +func (x BluetoothScannerState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use BluetoothScannerState.Descriptor instead. +func (BluetoothScannerState) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{30} +} + +type BluetoothScannerMode int32 + +const ( + BluetoothScannerMode_BLUETOOTH_SCANNER_MODE_PASSIVE BluetoothScannerMode = 0 + BluetoothScannerMode_BLUETOOTH_SCANNER_MODE_ACTIVE BluetoothScannerMode = 1 +) + +// Enum value maps for BluetoothScannerMode. +var ( + BluetoothScannerMode_name = map[int32]string{ + 0: "BLUETOOTH_SCANNER_MODE_PASSIVE", + 1: "BLUETOOTH_SCANNER_MODE_ACTIVE", + } + BluetoothScannerMode_value = map[string]int32{ + "BLUETOOTH_SCANNER_MODE_PASSIVE": 0, + "BLUETOOTH_SCANNER_MODE_ACTIVE": 1, + } +) + +func (x BluetoothScannerMode) Enum() *BluetoothScannerMode { + p := new(BluetoothScannerMode) + *p = x + return p +} + +func (x BluetoothScannerMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BluetoothScannerMode) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[31].Descriptor() +} + +func (BluetoothScannerMode) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[31] +} + +func (x BluetoothScannerMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use BluetoothScannerMode.Descriptor instead. +func (BluetoothScannerMode) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{31} } -// ==================== PUSH TO TALK ==================== +// ==================== VOICE ASSISTANT ==================== type VoiceAssistantSubscribeFlag int32 const ( @@ -1276,11 +1875,11 @@ func (x VoiceAssistantSubscribeFlag) String() string { } func (VoiceAssistantSubscribeFlag) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[22].Descriptor() + return file_api_proto_enumTypes[32].Descriptor() } func (VoiceAssistantSubscribeFlag) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[22] + return &file_api_proto_enumTypes[32] } func (x VoiceAssistantSubscribeFlag) Number() protoreflect.EnumNumber { @@ -1289,7 +1888,7 @@ func (x VoiceAssistantSubscribeFlag) Number() protoreflect.EnumNumber { // Deprecated: Use VoiceAssistantSubscribeFlag.Descriptor instead. func (VoiceAssistantSubscribeFlag) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{22} + return file_api_proto_rawDescGZIP(), []int{32} } type VoiceAssistantRequestFlag int32 @@ -1325,11 +1924,11 @@ func (x VoiceAssistantRequestFlag) String() string { } func (VoiceAssistantRequestFlag) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[23].Descriptor() + return file_api_proto_enumTypes[33].Descriptor() } func (VoiceAssistantRequestFlag) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[23] + return &file_api_proto_enumTypes[33] } func (x VoiceAssistantRequestFlag) Number() protoreflect.EnumNumber { @@ -1338,7 +1937,7 @@ func (x VoiceAssistantRequestFlag) Number() protoreflect.EnumNumber { // Deprecated: Use VoiceAssistantRequestFlag.Descriptor instead. func (VoiceAssistantRequestFlag) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{23} + return file_api_proto_rawDescGZIP(), []int{33} } type VoiceAssistantEvent int32 @@ -1359,26 +1958,28 @@ const ( VoiceAssistantEvent_VOICE_ASSISTANT_STT_VAD_END VoiceAssistantEvent = 12 VoiceAssistantEvent_VOICE_ASSISTANT_TTS_STREAM_START VoiceAssistantEvent = 98 VoiceAssistantEvent_VOICE_ASSISTANT_TTS_STREAM_END VoiceAssistantEvent = 99 + VoiceAssistantEvent_VOICE_ASSISTANT_INTENT_PROGRESS VoiceAssistantEvent = 100 ) // Enum value maps for VoiceAssistantEvent. var ( VoiceAssistantEvent_name = map[int32]string{ - 0: "VOICE_ASSISTANT_ERROR", - 1: "VOICE_ASSISTANT_RUN_START", - 2: "VOICE_ASSISTANT_RUN_END", - 3: "VOICE_ASSISTANT_STT_START", - 4: "VOICE_ASSISTANT_STT_END", - 5: "VOICE_ASSISTANT_INTENT_START", - 6: "VOICE_ASSISTANT_INTENT_END", - 7: "VOICE_ASSISTANT_TTS_START", - 8: "VOICE_ASSISTANT_TTS_END", - 9: "VOICE_ASSISTANT_WAKE_WORD_START", - 10: "VOICE_ASSISTANT_WAKE_WORD_END", - 11: "VOICE_ASSISTANT_STT_VAD_START", - 12: "VOICE_ASSISTANT_STT_VAD_END", - 98: "VOICE_ASSISTANT_TTS_STREAM_START", - 99: "VOICE_ASSISTANT_TTS_STREAM_END", + 0: "VOICE_ASSISTANT_ERROR", + 1: "VOICE_ASSISTANT_RUN_START", + 2: "VOICE_ASSISTANT_RUN_END", + 3: "VOICE_ASSISTANT_STT_START", + 4: "VOICE_ASSISTANT_STT_END", + 5: "VOICE_ASSISTANT_INTENT_START", + 6: "VOICE_ASSISTANT_INTENT_END", + 7: "VOICE_ASSISTANT_TTS_START", + 8: "VOICE_ASSISTANT_TTS_END", + 9: "VOICE_ASSISTANT_WAKE_WORD_START", + 10: "VOICE_ASSISTANT_WAKE_WORD_END", + 11: "VOICE_ASSISTANT_STT_VAD_START", + 12: "VOICE_ASSISTANT_STT_VAD_END", + 98: "VOICE_ASSISTANT_TTS_STREAM_START", + 99: "VOICE_ASSISTANT_TTS_STREAM_END", + 100: "VOICE_ASSISTANT_INTENT_PROGRESS", } VoiceAssistantEvent_value = map[string]int32{ "VOICE_ASSISTANT_ERROR": 0, @@ -1396,6 +1997,7 @@ var ( "VOICE_ASSISTANT_STT_VAD_END": 12, "VOICE_ASSISTANT_TTS_STREAM_START": 98, "VOICE_ASSISTANT_TTS_STREAM_END": 99, + "VOICE_ASSISTANT_INTENT_PROGRESS": 100, } ) @@ -1410,11 +2012,11 @@ func (x VoiceAssistantEvent) String() string { } func (VoiceAssistantEvent) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[24].Descriptor() + return file_api_proto_enumTypes[34].Descriptor() } func (VoiceAssistantEvent) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[24] + return &file_api_proto_enumTypes[34] } func (x VoiceAssistantEvent) Number() protoreflect.EnumNumber { @@ -1423,7 +2025,59 @@ func (x VoiceAssistantEvent) Number() protoreflect.EnumNumber { // Deprecated: Use VoiceAssistantEvent.Descriptor instead. func (VoiceAssistantEvent) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{24} + return file_api_proto_rawDescGZIP(), []int{34} +} + +type VoiceAssistantTimerEvent int32 + +const ( + VoiceAssistantTimerEvent_VOICE_ASSISTANT_TIMER_STARTED VoiceAssistantTimerEvent = 0 + VoiceAssistantTimerEvent_VOICE_ASSISTANT_TIMER_UPDATED VoiceAssistantTimerEvent = 1 + VoiceAssistantTimerEvent_VOICE_ASSISTANT_TIMER_CANCELLED VoiceAssistantTimerEvent = 2 + VoiceAssistantTimerEvent_VOICE_ASSISTANT_TIMER_FINISHED VoiceAssistantTimerEvent = 3 +) + +// Enum value maps for VoiceAssistantTimerEvent. +var ( + VoiceAssistantTimerEvent_name = map[int32]string{ + 0: "VOICE_ASSISTANT_TIMER_STARTED", + 1: "VOICE_ASSISTANT_TIMER_UPDATED", + 2: "VOICE_ASSISTANT_TIMER_CANCELLED", + 3: "VOICE_ASSISTANT_TIMER_FINISHED", + } + VoiceAssistantTimerEvent_value = map[string]int32{ + "VOICE_ASSISTANT_TIMER_STARTED": 0, + "VOICE_ASSISTANT_TIMER_UPDATED": 1, + "VOICE_ASSISTANT_TIMER_CANCELLED": 2, + "VOICE_ASSISTANT_TIMER_FINISHED": 3, + } +) + +func (x VoiceAssistantTimerEvent) Enum() *VoiceAssistantTimerEvent { + p := new(VoiceAssistantTimerEvent) + *p = x + return p +} + +func (x VoiceAssistantTimerEvent) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VoiceAssistantTimerEvent) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[35].Descriptor() +} + +func (VoiceAssistantTimerEvent) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[35] +} + +func (x VoiceAssistantTimerEvent) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use VoiceAssistantTimerEvent.Descriptor instead. +func (VoiceAssistantTimerEvent) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{35} } // ==================== ALARM CONTROL PANEL ==================== @@ -1481,11 +2135,11 @@ func (x AlarmControlPanelState) String() string { } func (AlarmControlPanelState) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[25].Descriptor() + return file_api_proto_enumTypes[36].Descriptor() } func (AlarmControlPanelState) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[25] + return &file_api_proto_enumTypes[36] } func (x AlarmControlPanelState) Number() protoreflect.EnumNumber { @@ -1494,7 +2148,7 @@ func (x AlarmControlPanelState) Number() protoreflect.EnumNumber { // Deprecated: Use AlarmControlPanelState.Descriptor instead. func (AlarmControlPanelState) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{25} + return file_api_proto_rawDescGZIP(), []int{36} } type AlarmControlPanelStateCommand int32 @@ -1542,11 +2196,11 @@ func (x AlarmControlPanelStateCommand) String() string { } func (AlarmControlPanelStateCommand) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[26].Descriptor() + return file_api_proto_enumTypes[37].Descriptor() } func (AlarmControlPanelStateCommand) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[26] + return &file_api_proto_enumTypes[37] } func (x AlarmControlPanelStateCommand) Number() protoreflect.EnumNumber { @@ -1555,7 +2209,7 @@ func (x AlarmControlPanelStateCommand) Number() protoreflect.EnumNumber { // Deprecated: Use AlarmControlPanelStateCommand.Descriptor instead. func (AlarmControlPanelStateCommand) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{26} + return file_api_proto_rawDescGZIP(), []int{37} } // ===================== TEXT ===================== @@ -1589,11 +2243,11 @@ func (x TextMode) String() string { } func (TextMode) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[27].Descriptor() + return file_api_proto_enumTypes[38].Descriptor() } func (TextMode) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[27] + return &file_api_proto_enumTypes[38] } func (x TextMode) Number() protoreflect.EnumNumber { @@ -1602,7 +2256,7 @@ func (x TextMode) Number() protoreflect.EnumNumber { // Deprecated: Use TextMode.Descriptor instead. func (TextMode) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{27} + return file_api_proto_rawDescGZIP(), []int{38} } type ValveOperation int32 @@ -1638,11 +2292,11 @@ func (x ValveOperation) String() string { } func (ValveOperation) Descriptor() protoreflect.EnumDescriptor { - return file_api_proto_enumTypes[28].Descriptor() + return file_api_proto_enumTypes[39].Descriptor() } func (ValveOperation) Type() protoreflect.EnumType { - return &file_api_proto_enumTypes[28] + return &file_api_proto_enumTypes[39] } func (x ValveOperation) Number() protoreflect.EnumNumber { @@ -1651,32 +2305,280 @@ func (x ValveOperation) Number() protoreflect.EnumNumber { // Deprecated: Use ValveOperation.Descriptor instead. func (ValveOperation) EnumDescriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{28} + return file_api_proto_rawDescGZIP(), []int{39} } -// Message sent at the beginning of each connection -// Can only be sent by the client and only at the beginning of the connection -type HelloRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type UpdateCommand int32 - // Description of client (like User Agent) - // For example "Home Assistant" - // Not strictly necessary to send but nice for debugging - // purposes. - ClientInfo string `protobuf:"bytes,1,opt,name=client_info,json=clientInfo,proto3" json:"client_info,omitempty"` - ApiVersionMajor uint32 `protobuf:"varint,2,opt,name=api_version_major,json=apiVersionMajor,proto3" json:"api_version_major,omitempty"` - ApiVersionMinor uint32 `protobuf:"varint,3,opt,name=api_version_minor,json=apiVersionMinor,proto3" json:"api_version_minor,omitempty"` -} +const ( + UpdateCommand_UPDATE_COMMAND_NONE UpdateCommand = 0 + UpdateCommand_UPDATE_COMMAND_UPDATE UpdateCommand = 1 + UpdateCommand_UPDATE_COMMAND_CHECK UpdateCommand = 2 +) -func (x *HelloRequest) Reset() { - *x = HelloRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +// Enum value maps for UpdateCommand. +var ( + UpdateCommand_name = map[int32]string{ + 0: "UPDATE_COMMAND_NONE", + 1: "UPDATE_COMMAND_UPDATE", + 2: "UPDATE_COMMAND_CHECK", + } + UpdateCommand_value = map[string]int32{ + "UPDATE_COMMAND_NONE": 0, + "UPDATE_COMMAND_UPDATE": 1, + "UPDATE_COMMAND_CHECK": 2, + } +) + +func (x UpdateCommand) Enum() *UpdateCommand { + p := new(UpdateCommand) + *p = x + return p +} + +func (x UpdateCommand) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (UpdateCommand) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[40].Descriptor() +} + +func (UpdateCommand) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[40] +} + +func (x UpdateCommand) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use UpdateCommand.Descriptor instead. +func (UpdateCommand) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{40} +} + +type ZWaveProxyRequestType int32 + +const ( + ZWaveProxyRequestType_ZWAVE_PROXY_REQUEST_TYPE_SUBSCRIBE ZWaveProxyRequestType = 0 + ZWaveProxyRequestType_ZWAVE_PROXY_REQUEST_TYPE_UNSUBSCRIBE ZWaveProxyRequestType = 1 + ZWaveProxyRequestType_ZWAVE_PROXY_REQUEST_TYPE_HOME_ID_CHANGE ZWaveProxyRequestType = 2 +) + +// Enum value maps for ZWaveProxyRequestType. +var ( + ZWaveProxyRequestType_name = map[int32]string{ + 0: "ZWAVE_PROXY_REQUEST_TYPE_SUBSCRIBE", + 1: "ZWAVE_PROXY_REQUEST_TYPE_UNSUBSCRIBE", + 2: "ZWAVE_PROXY_REQUEST_TYPE_HOME_ID_CHANGE", + } + ZWaveProxyRequestType_value = map[string]int32{ + "ZWAVE_PROXY_REQUEST_TYPE_SUBSCRIBE": 0, + "ZWAVE_PROXY_REQUEST_TYPE_UNSUBSCRIBE": 1, + "ZWAVE_PROXY_REQUEST_TYPE_HOME_ID_CHANGE": 2, + } +) + +func (x ZWaveProxyRequestType) Enum() *ZWaveProxyRequestType { + p := new(ZWaveProxyRequestType) + *p = x + return p +} + +func (x ZWaveProxyRequestType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ZWaveProxyRequestType) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[41].Descriptor() +} + +func (ZWaveProxyRequestType) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[41] +} + +func (x ZWaveProxyRequestType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ZWaveProxyRequestType.Descriptor instead. +func (ZWaveProxyRequestType) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{41} +} + +type SerialProxyParity int32 + +const ( + SerialProxyParity_SERIAL_PROXY_PARITY_NONE SerialProxyParity = 0 + SerialProxyParity_SERIAL_PROXY_PARITY_EVEN SerialProxyParity = 1 + SerialProxyParity_SERIAL_PROXY_PARITY_ODD SerialProxyParity = 2 +) + +// Enum value maps for SerialProxyParity. +var ( + SerialProxyParity_name = map[int32]string{ + 0: "SERIAL_PROXY_PARITY_NONE", + 1: "SERIAL_PROXY_PARITY_EVEN", + 2: "SERIAL_PROXY_PARITY_ODD", + } + SerialProxyParity_value = map[string]int32{ + "SERIAL_PROXY_PARITY_NONE": 0, + "SERIAL_PROXY_PARITY_EVEN": 1, + "SERIAL_PROXY_PARITY_ODD": 2, + } +) + +func (x SerialProxyParity) Enum() *SerialProxyParity { + p := new(SerialProxyParity) + *p = x + return p +} + +func (x SerialProxyParity) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SerialProxyParity) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[42].Descriptor() +} + +func (SerialProxyParity) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[42] +} + +func (x SerialProxyParity) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SerialProxyParity.Descriptor instead. +func (SerialProxyParity) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{42} +} + +type SerialProxyRequestType int32 + +const ( + SerialProxyRequestType_SERIAL_PROXY_REQUEST_TYPE_SUBSCRIBE SerialProxyRequestType = 0 // Subscribe to receive data from this serial proxy instance + SerialProxyRequestType_SERIAL_PROXY_REQUEST_TYPE_UNSUBSCRIBE SerialProxyRequestType = 1 // Unsubscribe from this serial proxy instance + SerialProxyRequestType_SERIAL_PROXY_REQUEST_TYPE_FLUSH SerialProxyRequestType = 2 // Flush the serial port (block until all TX data is sent) +) + +// Enum value maps for SerialProxyRequestType. +var ( + SerialProxyRequestType_name = map[int32]string{ + 0: "SERIAL_PROXY_REQUEST_TYPE_SUBSCRIBE", + 1: "SERIAL_PROXY_REQUEST_TYPE_UNSUBSCRIBE", + 2: "SERIAL_PROXY_REQUEST_TYPE_FLUSH", + } + SerialProxyRequestType_value = map[string]int32{ + "SERIAL_PROXY_REQUEST_TYPE_SUBSCRIBE": 0, + "SERIAL_PROXY_REQUEST_TYPE_UNSUBSCRIBE": 1, + "SERIAL_PROXY_REQUEST_TYPE_FLUSH": 2, + } +) + +func (x SerialProxyRequestType) Enum() *SerialProxyRequestType { + p := new(SerialProxyRequestType) + *p = x + return p +} + +func (x SerialProxyRequestType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SerialProxyRequestType) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[43].Descriptor() +} + +func (SerialProxyRequestType) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[43] +} + +func (x SerialProxyRequestType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SerialProxyRequestType.Descriptor instead. +func (SerialProxyRequestType) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{43} +} + +type SerialProxyStatus int32 + +const ( + SerialProxyStatus_SERIAL_PROXY_STATUS_OK SerialProxyStatus = 0 // Completed successfully; TX drain confirmed + SerialProxyStatus_SERIAL_PROXY_STATUS_ASSUMED_SUCCESS SerialProxyStatus = 1 // Platform cannot confirm TX drain; success assumed + SerialProxyStatus_SERIAL_PROXY_STATUS_ERROR SerialProxyStatus = 2 // Driver or hardware error + SerialProxyStatus_SERIAL_PROXY_STATUS_TIMEOUT SerialProxyStatus = 3 // Timed out before TX completed + SerialProxyStatus_SERIAL_PROXY_STATUS_NOT_SUPPORTED SerialProxyStatus = 4 // Request type not supported by this instance +) + +// Enum value maps for SerialProxyStatus. +var ( + SerialProxyStatus_name = map[int32]string{ + 0: "SERIAL_PROXY_STATUS_OK", + 1: "SERIAL_PROXY_STATUS_ASSUMED_SUCCESS", + 2: "SERIAL_PROXY_STATUS_ERROR", + 3: "SERIAL_PROXY_STATUS_TIMEOUT", + 4: "SERIAL_PROXY_STATUS_NOT_SUPPORTED", + } + SerialProxyStatus_value = map[string]int32{ + "SERIAL_PROXY_STATUS_OK": 0, + "SERIAL_PROXY_STATUS_ASSUMED_SUCCESS": 1, + "SERIAL_PROXY_STATUS_ERROR": 2, + "SERIAL_PROXY_STATUS_TIMEOUT": 3, + "SERIAL_PROXY_STATUS_NOT_SUPPORTED": 4, } +) + +func (x SerialProxyStatus) Enum() *SerialProxyStatus { + p := new(SerialProxyStatus) + *p = x + return p +} + +func (x SerialProxyStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SerialProxyStatus) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[44].Descriptor() +} + +func (SerialProxyStatus) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[44] +} + +func (x SerialProxyStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SerialProxyStatus.Descriptor instead. +func (SerialProxyStatus) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{44} +} + +// Message sent at the beginning of each connection +// Can only be sent by the client and only at the beginning of the connection +type HelloRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Description of client (like User Agent) + // For example "Home Assistant" + // Not strictly necessary to send but nice for debugging + // purposes. + ClientInfo string `protobuf:"bytes,1,opt,name=client_info,json=clientInfo,proto3" json:"client_info,omitempty"` + ApiVersionMajor uint32 `protobuf:"varint,2,opt,name=api_version_major,json=apiVersionMajor,proto3" json:"api_version_major,omitempty"` + ApiVersionMinor uint32 `protobuf:"varint,3,opt,name=api_version_minor,json=apiVersionMinor,proto3" json:"api_version_minor,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HelloRequest) Reset() { + *x = HelloRequest{} + mi := &file_api_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HelloRequest) String() string { @@ -1687,7 +2589,7 @@ func (*HelloRequest) ProtoMessage() {} func (x *HelloRequest) ProtoReflect() protoreflect.Message { mi := &file_api_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1726,10 +2628,7 @@ func (x *HelloRequest) GetApiVersionMinor() uint32 { // Confirmation of successful connection request. // Can only be sent by the server and only at the beginning of the connection type HelloResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The version of the API to use. The _client_ (for example Home Assistant) needs to check // for compatibility and if necessary adopt to an older API. // Major is for breaking changes in the base protocol - a mismatch will lead to immediate disconnect_client_ @@ -1738,19 +2637,20 @@ type HelloResponse struct { ApiVersionMinor uint32 `protobuf:"varint,2,opt,name=api_version_minor,json=apiVersionMinor,proto3" json:"api_version_minor,omitempty"` // A string identifying the server (ESP); like client info this may be empty // and only exists for debugging/logging purposes. - // For example "ESPHome v1.10.0 on ESP8266" + // Currently set to ESPHOME_VERSION string literal. ServerInfo string `protobuf:"bytes,3,opt,name=server_info,json=serverInfo,proto3" json:"server_info,omitempty"` - // The name of the server (App.get_name()) - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + // The name of the server (App.get_name() - device hostname) + // max_data_length matches ESPHOME_DEVICE_NAME_MAX_LEN (validated by validate_hostname) + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *HelloResponse) Reset() { *x = HelloResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HelloResponse) String() string { @@ -1761,7 +2661,7 @@ func (*HelloResponse) ProtoMessage() {} func (x *HelloResponse) ProtoReflect() protoreflect.Message { mi := &file_api_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1804,35 +2704,34 @@ func (x *HelloResponse) GetName() string { return "" } -// Message sent at the beginning of each connection to authenticate the client -// Can only be sent by the client and only at the beginning of the connection -type ConnectRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +// DEPRECATED in ESPHome 2026.1.0 - Password authentication is no longer supported. +// These messages are kept for protocol documentation but are not processed by the server. +// Use noise encryption instead: https://esphome.io/components/api/#configuration-variables +// +// Deprecated: Marked as deprecated in api.proto. +type AuthenticationRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Password string `protobuf:"bytes,1,opt,name=password,proto3" json:"password,omitempty"` unknownFields protoimpl.UnknownFields - - // The password to log in with - Password string `protobuf:"bytes,1,opt,name=password,proto3" json:"password,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ConnectRequest) Reset() { - *x = ConnectRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *AuthenticationRequest) Reset() { + *x = AuthenticationRequest{} + mi := &file_api_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ConnectRequest) String() string { +func (x *AuthenticationRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ConnectRequest) ProtoMessage() {} +func (*AuthenticationRequest) ProtoMessage() {} -func (x *ConnectRequest) ProtoReflect() protoreflect.Message { +func (x *AuthenticationRequest) ProtoReflect() protoreflect.Message { mi := &file_api_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1842,46 +2741,42 @@ func (x *ConnectRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ConnectRequest.ProtoReflect.Descriptor instead. -func (*ConnectRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use AuthenticationRequest.ProtoReflect.Descriptor instead. +func (*AuthenticationRequest) Descriptor() ([]byte, []int) { return file_api_proto_rawDescGZIP(), []int{2} } -func (x *ConnectRequest) GetPassword() string { +func (x *AuthenticationRequest) GetPassword() string { if x != nil { return x.Password } return "" } -// Confirmation of successful connection. After this the connection is available for all traffic. -// Can only be sent by the server and only at the beginning of the connection -type ConnectResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - InvalidPassword bool `protobuf:"varint,1,opt,name=invalid_password,json=invalidPassword,proto3" json:"invalid_password,omitempty"` +// Deprecated: Marked as deprecated in api.proto. +type AuthenticationResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + InvalidPassword bool `protobuf:"varint,1,opt,name=invalid_password,json=invalidPassword,proto3" json:"invalid_password,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ConnectResponse) Reset() { - *x = ConnectResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *AuthenticationResponse) Reset() { + *x = AuthenticationResponse{} + mi := &file_api_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ConnectResponse) String() string { +func (x *AuthenticationResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ConnectResponse) ProtoMessage() {} +func (*AuthenticationResponse) ProtoMessage() {} -func (x *ConnectResponse) ProtoReflect() protoreflect.Message { +func (x *AuthenticationResponse) ProtoReflect() protoreflect.Message { mi := &file_api_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1891,12 +2786,12 @@ func (x *ConnectResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ConnectResponse.ProtoReflect.Descriptor instead. -func (*ConnectResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use AuthenticationResponse.ProtoReflect.Descriptor instead. +func (*AuthenticationResponse) Descriptor() ([]byte, []int) { return file_api_proto_rawDescGZIP(), []int{3} } -func (x *ConnectResponse) GetInvalidPassword() bool { +func (x *AuthenticationResponse) GetInvalidPassword() bool { if x != nil { return x.InvalidPassword } @@ -1906,18 +2801,19 @@ func (x *ConnectResponse) GetInvalidPassword() bool { // Request to close the connection. // Can be sent by both the client and server type DisconnectRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + // Optional reason the connection is being closed. Older peers that do not + // send this field will report DISCONNECT_REASON_UNSPECIFIED (0). + Reason DisconnectReason `protobuf:"varint,1,opt,name=reason,proto3,enum=DisconnectReason" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DisconnectRequest) Reset() { *x = DisconnectRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DisconnectRequest) String() string { @@ -1928,7 +2824,7 @@ func (*DisconnectRequest) ProtoMessage() {} func (x *DisconnectRequest) ProtoReflect() protoreflect.Message { mi := &file_api_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1943,19 +2839,24 @@ func (*DisconnectRequest) Descriptor() ([]byte, []int) { return file_api_proto_rawDescGZIP(), []int{4} } +func (x *DisconnectRequest) GetReason() DisconnectReason { + if x != nil { + return x.Reason + } + return DisconnectReason_DISCONNECT_REASON_UNSPECIFIED +} + type DisconnectResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DisconnectResponse) Reset() { *x = DisconnectResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DisconnectResponse) String() string { @@ -1966,7 +2867,7 @@ func (*DisconnectResponse) ProtoMessage() {} func (x *DisconnectResponse) ProtoReflect() protoreflect.Message { mi := &file_api_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1982,18 +2883,16 @@ func (*DisconnectResponse) Descriptor() ([]byte, []int) { } type PingRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PingRequest) Reset() { *x = PingRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PingRequest) String() string { @@ -2004,7 +2903,7 @@ func (*PingRequest) ProtoMessage() {} func (x *PingRequest) ProtoReflect() protoreflect.Message { mi := &file_api_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2020,18 +2919,16 @@ func (*PingRequest) Descriptor() ([]byte, []int) { } type PingResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PingResponse) Reset() { *x = PingResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PingResponse) String() string { @@ -2042,7 +2939,7 @@ func (*PingResponse) ProtoMessage() {} func (x *PingResponse) ProtoReflect() protoreflect.Message { mi := &file_api_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2058,18 +2955,16 @@ func (*PingResponse) Descriptor() ([]byte, []int) { } type DeviceInfoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeviceInfoRequest) Reset() { *x = DeviceInfoRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeviceInfoRequest) String() string { @@ -2080,7 +2975,7 @@ func (*DeviceInfoRequest) ProtoMessage() {} func (x *DeviceInfoRequest) ProtoReflect() protoreflect.Message { mi := &file_api_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2095,56 +2990,31 @@ func (*DeviceInfoRequest) Descriptor() ([]byte, []int) { return file_api_proto_rawDescGZIP(), []int{8} } -type DeviceInfoResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type AreaInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + AreaId uint32 `protobuf:"varint,1,opt,name=area_id,json=areaId,proto3" json:"area_id,omitempty"` + // max_data_length matches core/config.FRIENDLY_NAME_MAX_LEN via AREA_SCHEMA + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - UsesPassword bool `protobuf:"varint,1,opt,name=uses_password,json=usesPassword,proto3" json:"uses_password,omitempty"` - // The name of the node, given by "App.set_name()" - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // The mac address of the device. For example "AC:BC:32:89:0E:A9" - MacAddress string `protobuf:"bytes,3,opt,name=mac_address,json=macAddress,proto3" json:"mac_address,omitempty"` - // A string describing the ESPHome version. For example "1.10.0" - EsphomeVersion string `protobuf:"bytes,4,opt,name=esphome_version,json=esphomeVersion,proto3" json:"esphome_version,omitempty"` - // A string describing the date of compilation, this is generated by the compiler - // and therefore may not be in the same format all the time. - // If the user isn't using ESPHome, this will also not be set. - CompilationTime string `protobuf:"bytes,5,opt,name=compilation_time,json=compilationTime,proto3" json:"compilation_time,omitempty"` - // The model of the board. For example NodeMCU - Model string `protobuf:"bytes,6,opt,name=model,proto3" json:"model,omitempty"` - HasDeepSleep bool `protobuf:"varint,7,opt,name=has_deep_sleep,json=hasDeepSleep,proto3" json:"has_deep_sleep,omitempty"` - // The esphome project details if set - ProjectName string `protobuf:"bytes,8,opt,name=project_name,json=projectName,proto3" json:"project_name,omitempty"` - ProjectVersion string `protobuf:"bytes,9,opt,name=project_version,json=projectVersion,proto3" json:"project_version,omitempty"` - WebserverPort uint32 `protobuf:"varint,10,opt,name=webserver_port,json=webserverPort,proto3" json:"webserver_port,omitempty"` - LegacyBluetoothProxyVersion uint32 `protobuf:"varint,11,opt,name=legacy_bluetooth_proxy_version,json=legacyBluetoothProxyVersion,proto3" json:"legacy_bluetooth_proxy_version,omitempty"` - BluetoothProxyFeatureFlags uint32 `protobuf:"varint,15,opt,name=bluetooth_proxy_feature_flags,json=bluetoothProxyFeatureFlags,proto3" json:"bluetooth_proxy_feature_flags,omitempty"` - Manufacturer string `protobuf:"bytes,12,opt,name=manufacturer,proto3" json:"manufacturer,omitempty"` - FriendlyName string `protobuf:"bytes,13,opt,name=friendly_name,json=friendlyName,proto3" json:"friendly_name,omitempty"` - LegacyVoiceAssistantVersion uint32 `protobuf:"varint,14,opt,name=legacy_voice_assistant_version,json=legacyVoiceAssistantVersion,proto3" json:"legacy_voice_assistant_version,omitempty"` - VoiceAssistantFeatureFlags uint32 `protobuf:"varint,17,opt,name=voice_assistant_feature_flags,json=voiceAssistantFeatureFlags,proto3" json:"voice_assistant_feature_flags,omitempty"` - SuggestedArea string `protobuf:"bytes,16,opt,name=suggested_area,json=suggestedArea,proto3" json:"suggested_area,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *DeviceInfoResponse) Reset() { - *x = DeviceInfoResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *AreaInfo) Reset() { + *x = AreaInfo{} + mi := &file_api_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *DeviceInfoResponse) String() string { +func (x *AreaInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeviceInfoResponse) ProtoMessage() {} +func (*AreaInfo) ProtoMessage() {} -func (x *DeviceInfoResponse) ProtoReflect() protoreflect.Message { +func (x *AreaInfo) ProtoReflect() protoreflect.Message { mi := &file_api_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2154,42 +3024,271 @@ func (x *DeviceInfoResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeviceInfoResponse.ProtoReflect.Descriptor instead. -func (*DeviceInfoResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use AreaInfo.ProtoReflect.Descriptor instead. +func (*AreaInfo) Descriptor() ([]byte, []int) { return file_api_proto_rawDescGZIP(), []int{9} } -func (x *DeviceInfoResponse) GetUsesPassword() bool { +func (x *AreaInfo) GetAreaId() uint32 { if x != nil { - return x.UsesPassword + return x.AreaId } - return false + return 0 } -func (x *DeviceInfoResponse) GetName() string { +func (x *AreaInfo) GetName() string { if x != nil { return x.Name } return "" } -func (x *DeviceInfoResponse) GetMacAddress() string { - if x != nil { - return x.MacAddress - } - return "" +type DeviceInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + DeviceId uint32 `protobuf:"varint,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + // max_data_length matches core/config.FRIENDLY_NAME_MAX_LEN via DEVICE_SCHEMA + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + AreaId uint32 `protobuf:"varint,3,opt,name=area_id,json=areaId,proto3" json:"area_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *DeviceInfoResponse) GetEsphomeVersion() string { - if x != nil { - return x.EsphomeVersion - } - return "" +func (x *DeviceInfo) Reset() { + *x = DeviceInfo{} + mi := &file_api_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *DeviceInfoResponse) GetCompilationTime() string { - if x != nil { - return x.CompilationTime +func (x *DeviceInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceInfo) ProtoMessage() {} + +func (x *DeviceInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceInfo.ProtoReflect.Descriptor instead. +func (*DeviceInfo) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{10} +} + +func (x *DeviceInfo) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *DeviceInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *DeviceInfo) GetAreaId() uint32 { + if x != nil { + return x.AreaId + } + return 0 +} + +type SerialProxyInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Human-readable port name + PortType SerialProxyPortType `protobuf:"varint,2,opt,name=port_type,json=portType,proto3,enum=SerialProxyPortType" json:"port_type,omitempty"` // Port type (RS232, RS485) + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SerialProxyInfo) Reset() { + *x = SerialProxyInfo{} + mi := &file_api_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SerialProxyInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SerialProxyInfo) ProtoMessage() {} + +func (x *SerialProxyInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SerialProxyInfo.ProtoReflect.Descriptor instead. +func (*SerialProxyInfo) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{11} +} + +func (x *SerialProxyInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SerialProxyInfo) GetPortType() SerialProxyPortType { + if x != nil { + return x.PortType + } + return SerialProxyPortType_SERIAL_PROXY_PORT_TYPE_TTL +} + +// DeviceInfoResponse max_data_length values: +// +// name = 31 (ESPHOME_DEVICE_NAME_MAX_LEN, validated by validate_hostname) +// friendly_name = 120 (core/config.FRIENDLY_NAME_MAX_LEN) +// mac_address/bluetooth_mac_address = 17 (MAC_ADDRESS_PRETTY_BUFFER_SIZE - 1, constexpr) +// esphome_version = 32 (ESPHOME_VERSION string literal) +// compilation_time = 25 (Application::BUILD_TIME_STR_SIZE - 1, constexpr) +// manufacturer = 20 (longest hardcoded literal: "Nordic Semiconductor") +// model = 127 (core/config.BOARD_MAX_LENGTH, validated in platform schemas) +// project_name/project_version = 127 (core/config.PROJECT_MAX_LENGTH) +// suggested_area = 120 (core/config.FRIENDLY_NAME_MAX_LEN via AREA_SCHEMA) +type DeviceInfoResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Deprecated in ESPHome 2026.1.0, but kept for backward compatibility + // with older ESPHome versions that still send this field. + // + // Deprecated: Marked as deprecated in api.proto. + UsesPassword bool `protobuf:"varint,1,opt,name=uses_password,json=usesPassword,proto3" json:"uses_password,omitempty"` + // The name of the node, given by "App.set_name()" - device hostname + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // The mac address of the device. For example "AC:BC:32:89:0E:A9" + MacAddress string `protobuf:"bytes,3,opt,name=mac_address,json=macAddress,proto3" json:"mac_address,omitempty"` + // A string describing the ESPHome version. For example "1.10.0" + EsphomeVersion string `protobuf:"bytes,4,opt,name=esphome_version,json=esphomeVersion,proto3" json:"esphome_version,omitempty"` + // A string describing the date of compilation, this is generated by the compiler + // and therefore may not be in the same format all the time. + // If the user isn't using ESPHome, this will also not be set. + CompilationTime string `protobuf:"bytes,5,opt,name=compilation_time,json=compilationTime,proto3" json:"compilation_time,omitempty"` + // The model of the board. For example NodeMCU + // max_data_length matches core/config.BOARD_MAX_LENGTH (validated in platform schemas) + Model string `protobuf:"bytes,6,opt,name=model,proto3" json:"model,omitempty"` + HasDeepSleep bool `protobuf:"varint,7,opt,name=has_deep_sleep,json=hasDeepSleep,proto3" json:"has_deep_sleep,omitempty"` + // The esphome project details if set + // max_data_length matches core/config.PROJECT_MAX_LENGTH + ProjectName string `protobuf:"bytes,8,opt,name=project_name,json=projectName,proto3" json:"project_name,omitempty"` + ProjectVersion string `protobuf:"bytes,9,opt,name=project_version,json=projectVersion,proto3" json:"project_version,omitempty"` + WebserverPort uint32 `protobuf:"varint,10,opt,name=webserver_port,json=webserverPort,proto3" json:"webserver_port,omitempty"` + // Deprecated in API version 1.9 + // + // Deprecated: Marked as deprecated in api.proto. + LegacyBluetoothProxyVersion uint32 `protobuf:"varint,11,opt,name=legacy_bluetooth_proxy_version,json=legacyBluetoothProxyVersion,proto3" json:"legacy_bluetooth_proxy_version,omitempty"` + BluetoothProxyFeatureFlags uint32 `protobuf:"varint,15,opt,name=bluetooth_proxy_feature_flags,json=bluetoothProxyFeatureFlags,proto3" json:"bluetooth_proxy_feature_flags,omitempty"` + Manufacturer string `protobuf:"bytes,12,opt,name=manufacturer,proto3" json:"manufacturer,omitempty"` + FriendlyName string `protobuf:"bytes,13,opt,name=friendly_name,json=friendlyName,proto3" json:"friendly_name,omitempty"` + // Deprecated in API version 1.10 + // + // Deprecated: Marked as deprecated in api.proto. + LegacyVoiceAssistantVersion uint32 `protobuf:"varint,14,opt,name=legacy_voice_assistant_version,json=legacyVoiceAssistantVersion,proto3" json:"legacy_voice_assistant_version,omitempty"` + VoiceAssistantFeatureFlags uint32 `protobuf:"varint,17,opt,name=voice_assistant_feature_flags,json=voiceAssistantFeatureFlags,proto3" json:"voice_assistant_feature_flags,omitempty"` + SuggestedArea string `protobuf:"bytes,16,opt,name=suggested_area,json=suggestedArea,proto3" json:"suggested_area,omitempty"` + // The Bluetooth mac address of the device. For example "AC:BC:32:89:0E:AA" + BluetoothMacAddress string `protobuf:"bytes,18,opt,name=bluetooth_mac_address,json=bluetoothMacAddress,proto3" json:"bluetooth_mac_address,omitempty"` + // Supports receiving and saving api encryption key + ApiEncryptionSupported bool `protobuf:"varint,19,opt,name=api_encryption_supported,json=apiEncryptionSupported,proto3" json:"api_encryption_supported,omitempty"` + Devices []*DeviceInfo `protobuf:"bytes,20,rep,name=devices,proto3" json:"devices,omitempty"` + Areas []*AreaInfo `protobuf:"bytes,21,rep,name=areas,proto3" json:"areas,omitempty"` + // Top-level area info to phase out suggested_area + Area *AreaInfo `protobuf:"bytes,22,opt,name=area,proto3" json:"area,omitempty"` + // Indicates if Z-Wave proxy support is available and features supported + ZwaveProxyFeatureFlags uint32 `protobuf:"varint,23,opt,name=zwave_proxy_feature_flags,json=zwaveProxyFeatureFlags,proto3" json:"zwave_proxy_feature_flags,omitempty"` + ZwaveHomeId uint32 `protobuf:"varint,24,opt,name=zwave_home_id,json=zwaveHomeId,proto3" json:"zwave_home_id,omitempty"` + // Serial proxy instance metadata + SerialProxies []*SerialProxyInfo `protobuf:"bytes,25,rep,name=serial_proxies,json=serialProxies,proto3" json:"serial_proxies,omitempty"` + // Device is unprovisioned and accepts Noise handshakes with the well-known + // all-zeros PSK, so the api encryption key can be provisioned without being + // sent in plaintext (protects against passive sniffing, not active MITM) + ApiEncryptionProvisionable bool `protobuf:"varint,26,opt,name=api_encryption_provisionable,json=apiEncryptionProvisionable,proto3" json:"api_encryption_provisionable,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeviceInfoResponse) Reset() { + *x = DeviceInfoResponse{} + mi := &file_api_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeviceInfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceInfoResponse) ProtoMessage() {} + +func (x *DeviceInfoResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceInfoResponse.ProtoReflect.Descriptor instead. +func (*DeviceInfoResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{12} +} + +// Deprecated: Marked as deprecated in api.proto. +func (x *DeviceInfoResponse) GetUsesPassword() bool { + if x != nil { + return x.UsesPassword + } + return false +} + +func (x *DeviceInfoResponse) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *DeviceInfoResponse) GetMacAddress() string { + if x != nil { + return x.MacAddress + } + return "" +} + +func (x *DeviceInfoResponse) GetEsphomeVersion() string { + if x != nil { + return x.EsphomeVersion + } + return "" +} + +func (x *DeviceInfoResponse) GetCompilationTime() string { + if x != nil { + return x.CompilationTime } return "" } @@ -2229,6 +3328,7 @@ func (x *DeviceInfoResponse) GetWebserverPort() uint32 { return 0 } +// Deprecated: Marked as deprecated in api.proto. func (x *DeviceInfoResponse) GetLegacyBluetoothProxyVersion() uint32 { if x != nil { return x.LegacyBluetoothProxyVersion @@ -2257,6 +3357,7 @@ func (x *DeviceInfoResponse) GetFriendlyName() string { return "" } +// Deprecated: Marked as deprecated in api.proto. func (x *DeviceInfoResponse) GetLegacyVoiceAssistantVersion() uint32 { if x != nil { return x.LegacyVoiceAssistantVersion @@ -2278,19 +3379,80 @@ func (x *DeviceInfoResponse) GetSuggestedArea() string { return "" } +func (x *DeviceInfoResponse) GetBluetoothMacAddress() string { + if x != nil { + return x.BluetoothMacAddress + } + return "" +} + +func (x *DeviceInfoResponse) GetApiEncryptionSupported() bool { + if x != nil { + return x.ApiEncryptionSupported + } + return false +} + +func (x *DeviceInfoResponse) GetDevices() []*DeviceInfo { + if x != nil { + return x.Devices + } + return nil +} + +func (x *DeviceInfoResponse) GetAreas() []*AreaInfo { + if x != nil { + return x.Areas + } + return nil +} + +func (x *DeviceInfoResponse) GetArea() *AreaInfo { + if x != nil { + return x.Area + } + return nil +} + +func (x *DeviceInfoResponse) GetZwaveProxyFeatureFlags() uint32 { + if x != nil { + return x.ZwaveProxyFeatureFlags + } + return 0 +} + +func (x *DeviceInfoResponse) GetZwaveHomeId() uint32 { + if x != nil { + return x.ZwaveHomeId + } + return 0 +} + +func (x *DeviceInfoResponse) GetSerialProxies() []*SerialProxyInfo { + if x != nil { + return x.SerialProxies + } + return nil +} + +func (x *DeviceInfoResponse) GetApiEncryptionProvisionable() bool { + if x != nil { + return x.ApiEncryptionProvisionable + } + return false +} + type ListEntitiesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListEntitiesRequest) Reset() { *x = ListEntitiesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListEntitiesRequest) String() string { @@ -2300,8 +3462,8 @@ func (x *ListEntitiesRequest) String() string { func (*ListEntitiesRequest) ProtoMessage() {} func (x *ListEntitiesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[13] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2313,22 +3475,20 @@ func (x *ListEntitiesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEntitiesRequest.ProtoReflect.Descriptor instead. func (*ListEntitiesRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{10} + return file_api_proto_rawDescGZIP(), []int{13} } type ListEntitiesDoneResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListEntitiesDoneResponse) Reset() { *x = ListEntitiesDoneResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListEntitiesDoneResponse) String() string { @@ -2338,8 +3498,8 @@ func (x *ListEntitiesDoneResponse) String() string { func (*ListEntitiesDoneResponse) ProtoMessage() {} func (x *ListEntitiesDoneResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[14] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2351,22 +3511,20 @@ func (x *ListEntitiesDoneResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEntitiesDoneResponse.ProtoReflect.Descriptor instead. func (*ListEntitiesDoneResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{11} + return file_api_proto_rawDescGZIP(), []int{14} } type SubscribeStatesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubscribeStatesRequest) Reset() { *x = SubscribeStatesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeStatesRequest) String() string { @@ -2376,8 +3534,8 @@ func (x *SubscribeStatesRequest) String() string { func (*SubscribeStatesRequest) ProtoMessage() {} func (x *SubscribeStatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[15] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2389,33 +3547,30 @@ func (x *SubscribeStatesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeStatesRequest.ProtoReflect.Descriptor instead. func (*SubscribeStatesRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{12} + return file_api_proto_rawDescGZIP(), []int{15} } // ==================== BINARY SENSOR ==================== type ListEntitiesBinarySensorResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - DeviceClass string `protobuf:"bytes,5,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` - IsStatusBinarySensor bool `protobuf:"varint,6,opt,name=is_status_binary_sensor,json=isStatusBinarySensor,proto3" json:"is_status_binary_sensor,omitempty"` - DisabledByDefault bool `protobuf:"varint,7,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - Icon string `protobuf:"bytes,8,opt,name=icon,proto3" json:"icon,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,9,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + DeviceClass string `protobuf:"bytes,5,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + IsStatusBinarySensor bool `protobuf:"varint,6,opt,name=is_status_binary_sensor,json=isStatusBinarySensor,proto3" json:"is_status_binary_sensor,omitempty"` + DisabledByDefault bool `protobuf:"varint,7,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + Icon string `protobuf:"bytes,8,opt,name=icon,proto3" json:"icon,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,9,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceId uint32 `protobuf:"varint,10,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListEntitiesBinarySensorResponse) Reset() { *x = ListEntitiesBinarySensorResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListEntitiesBinarySensorResponse) String() string { @@ -2425,8 +3580,8 @@ func (x *ListEntitiesBinarySensorResponse) String() string { func (*ListEntitiesBinarySensorResponse) ProtoMessage() {} func (x *ListEntitiesBinarySensorResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[16] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2438,7 +3593,7 @@ func (x *ListEntitiesBinarySensorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEntitiesBinarySensorResponse.ProtoReflect.Descriptor instead. func (*ListEntitiesBinarySensorResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{13} + return file_api_proto_rawDescGZIP(), []int{16} } func (x *ListEntitiesBinarySensorResponse) GetObjectId() string { @@ -2462,13 +3617,6 @@ func (x *ListEntitiesBinarySensorResponse) GetName() string { return "" } -func (x *ListEntitiesBinarySensorResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" -} - func (x *ListEntitiesBinarySensorResponse) GetDeviceClass() string { if x != nil { return x.DeviceClass @@ -2504,25 +3652,30 @@ func (x *ListEntitiesBinarySensorResponse) GetEntityCategory() EntityCategory { return EntityCategory_ENTITY_CATEGORY_NONE } -type BinarySensorStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesBinarySensorResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State bool `protobuf:"varint,2,opt,name=state,proto3" json:"state,omitempty"` +type BinarySensorStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State bool `protobuf:"varint,2,opt,name=state,proto3" json:"state,omitempty"` // If the binary sensor does not have a valid state yet. // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller - MissingState bool `protobuf:"varint,3,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` -} + MissingState bool `protobuf:"varint,3,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` + DeviceId uint32 `protobuf:"varint,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} func (x *BinarySensorStateResponse) Reset() { *x = BinarySensorStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BinarySensorStateResponse) String() string { @@ -2532,8 +3685,8 @@ func (x *BinarySensorStateResponse) String() string { func (*BinarySensorStateResponse) ProtoMessage() {} func (x *BinarySensorStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[17] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2545,7 +3698,7 @@ func (x *BinarySensorStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BinarySensorStateResponse.ProtoReflect.Descriptor instead. func (*BinarySensorStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{14} + return file_api_proto_rawDescGZIP(), []int{17} } func (x *BinarySensorStateResponse) GetKey() uint32 { @@ -2569,33 +3722,37 @@ func (x *BinarySensorStateResponse) GetMissingState() bool { return false } +func (x *BinarySensorStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + // ==================== COVER ==================== type ListEntitiesCoverResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - AssumedState bool `protobuf:"varint,5,opt,name=assumed_state,json=assumedState,proto3" json:"assumed_state,omitempty"` - SupportsPosition bool `protobuf:"varint,6,opt,name=supports_position,json=supportsPosition,proto3" json:"supports_position,omitempty"` - SupportsTilt bool `protobuf:"varint,7,opt,name=supports_tilt,json=supportsTilt,proto3" json:"supports_tilt,omitempty"` - DeviceClass string `protobuf:"bytes,8,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` - DisabledByDefault bool `protobuf:"varint,9,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - Icon string `protobuf:"bytes,10,opt,name=icon,proto3" json:"icon,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,11,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` - SupportsStop bool `protobuf:"varint,12,opt,name=supports_stop,json=supportsStop,proto3" json:"supports_stop,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + AssumedState bool `protobuf:"varint,5,opt,name=assumed_state,json=assumedState,proto3" json:"assumed_state,omitempty"` + SupportsPosition bool `protobuf:"varint,6,opt,name=supports_position,json=supportsPosition,proto3" json:"supports_position,omitempty"` + SupportsTilt bool `protobuf:"varint,7,opt,name=supports_tilt,json=supportsTilt,proto3" json:"supports_tilt,omitempty"` + DeviceClass string `protobuf:"bytes,8,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + DisabledByDefault bool `protobuf:"varint,9,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + Icon string `protobuf:"bytes,10,opt,name=icon,proto3" json:"icon,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,11,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + SupportsStop bool `protobuf:"varint,12,opt,name=supports_stop,json=supportsStop,proto3" json:"supports_stop,omitempty"` + DeviceId uint32 `protobuf:"varint,13,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListEntitiesCoverResponse) Reset() { *x = ListEntitiesCoverResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListEntitiesCoverResponse) String() string { @@ -2605,8 +3762,8 @@ func (x *ListEntitiesCoverResponse) String() string { func (*ListEntitiesCoverResponse) ProtoMessage() {} func (x *ListEntitiesCoverResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[18] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2618,7 +3775,7 @@ func (x *ListEntitiesCoverResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEntitiesCoverResponse.ProtoReflect.Descriptor instead. func (*ListEntitiesCoverResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{15} + return file_api_proto_rawDescGZIP(), []int{18} } func (x *ListEntitiesCoverResponse) GetObjectId() string { @@ -2642,13 +3799,6 @@ func (x *ListEntitiesCoverResponse) GetName() string { return "" } -func (x *ListEntitiesCoverResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" -} - func (x *ListEntitiesCoverResponse) GetAssumedState() bool { if x != nil { return x.AssumedState @@ -2705,27 +3855,35 @@ func (x *ListEntitiesCoverResponse) GetSupportsStop() bool { return false } -type CoverStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesCoverResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` +type CoverStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` // legacy: state has been removed in 1.13 // clients/servers must still send/accept it until the next protocol change + // Deprecated in API version 1.1 + // + // Deprecated: Marked as deprecated in api.proto. LegacyState LegacyCoverState `protobuf:"varint,2,opt,name=legacy_state,json=legacyState,proto3,enum=LegacyCoverState" json:"legacy_state,omitempty"` Position float32 `protobuf:"fixed32,3,opt,name=position,proto3" json:"position,omitempty"` Tilt float32 `protobuf:"fixed32,4,opt,name=tilt,proto3" json:"tilt,omitempty"` CurrentOperation CoverOperation `protobuf:"varint,5,opt,name=current_operation,json=currentOperation,proto3,enum=CoverOperation" json:"current_operation,omitempty"` + DeviceId uint32 `protobuf:"varint,6,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CoverStateResponse) Reset() { *x = CoverStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CoverStateResponse) String() string { @@ -2735,8 +3893,8 @@ func (x *CoverStateResponse) String() string { func (*CoverStateResponse) ProtoMessage() {} func (x *CoverStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[19] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2748,7 +3906,7 @@ func (x *CoverStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CoverStateResponse.ProtoReflect.Descriptor instead. func (*CoverStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{16} + return file_api_proto_rawDescGZIP(), []int{19} } func (x *CoverStateResponse) GetKey() uint32 { @@ -2758,6 +3916,7 @@ func (x *CoverStateResponse) GetKey() uint32 { return 0 } +// Deprecated: Marked as deprecated in api.proto. func (x *CoverStateResponse) GetLegacyState() LegacyCoverState { if x != nil { return x.LegacyState @@ -2786,30 +3945,41 @@ func (x *CoverStateResponse) GetCurrentOperation() CoverOperation { return CoverOperation_COVER_OPERATION_IDLE } -type CoverCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *CoverStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` +type CoverCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` // legacy: command has been removed in 1.13 // clients/servers must still send/accept it until the next protocol change - HasLegacyCommand bool `protobuf:"varint,2,opt,name=has_legacy_command,json=hasLegacyCommand,proto3" json:"has_legacy_command,omitempty"` - LegacyCommand LegacyCoverCommand `protobuf:"varint,3,opt,name=legacy_command,json=legacyCommand,proto3,enum=LegacyCoverCommand" json:"legacy_command,omitempty"` - HasPosition bool `protobuf:"varint,4,opt,name=has_position,json=hasPosition,proto3" json:"has_position,omitempty"` - Position float32 `protobuf:"fixed32,5,opt,name=position,proto3" json:"position,omitempty"` - HasTilt bool `protobuf:"varint,6,opt,name=has_tilt,json=hasTilt,proto3" json:"has_tilt,omitempty"` - Tilt float32 `protobuf:"fixed32,7,opt,name=tilt,proto3" json:"tilt,omitempty"` - Stop bool `protobuf:"varint,8,opt,name=stop,proto3" json:"stop,omitempty"` + // Deprecated in API version 1.1 + // + // Deprecated: Marked as deprecated in api.proto. + HasLegacyCommand bool `protobuf:"varint,2,opt,name=has_legacy_command,json=hasLegacyCommand,proto3" json:"has_legacy_command,omitempty"` + // Deprecated in API version 1.1 + // + // Deprecated: Marked as deprecated in api.proto. + LegacyCommand LegacyCoverCommand `protobuf:"varint,3,opt,name=legacy_command,json=legacyCommand,proto3,enum=LegacyCoverCommand" json:"legacy_command,omitempty"` + HasPosition bool `protobuf:"varint,4,opt,name=has_position,json=hasPosition,proto3" json:"has_position,omitempty"` + Position float32 `protobuf:"fixed32,5,opt,name=position,proto3" json:"position,omitempty"` + HasTilt bool `protobuf:"varint,6,opt,name=has_tilt,json=hasTilt,proto3" json:"has_tilt,omitempty"` + Tilt float32 `protobuf:"fixed32,7,opt,name=tilt,proto3" json:"tilt,omitempty"` + Stop bool `protobuf:"varint,8,opt,name=stop,proto3" json:"stop,omitempty"` + DeviceId uint32 `protobuf:"varint,9,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CoverCommandRequest) Reset() { *x = CoverCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CoverCommandRequest) String() string { @@ -2819,8 +3989,8 @@ func (x *CoverCommandRequest) String() string { func (*CoverCommandRequest) ProtoMessage() {} func (x *CoverCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[20] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2832,7 +4002,7 @@ func (x *CoverCommandRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CoverCommandRequest.ProtoReflect.Descriptor instead. func (*CoverCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{17} + return file_api_proto_rawDescGZIP(), []int{20} } func (x *CoverCommandRequest) GetKey() uint32 { @@ -2842,6 +4012,7 @@ func (x *CoverCommandRequest) GetKey() uint32 { return 0 } +// Deprecated: Marked as deprecated in api.proto. func (x *CoverCommandRequest) GetHasLegacyCommand() bool { if x != nil { return x.HasLegacyCommand @@ -2849,6 +4020,7 @@ func (x *CoverCommandRequest) GetHasLegacyCommand() bool { return false } +// Deprecated: Marked as deprecated in api.proto. func (x *CoverCommandRequest) GetLegacyCommand() LegacyCoverCommand { if x != nil { return x.LegacyCommand @@ -2891,33 +4063,37 @@ func (x *CoverCommandRequest) GetStop() bool { return false } +func (x *CoverCommandRequest) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + // ==================== FAN ==================== type ListEntitiesFanResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - SupportsOscillation bool `protobuf:"varint,5,opt,name=supports_oscillation,json=supportsOscillation,proto3" json:"supports_oscillation,omitempty"` - SupportsSpeed bool `protobuf:"varint,6,opt,name=supports_speed,json=supportsSpeed,proto3" json:"supports_speed,omitempty"` - SupportsDirection bool `protobuf:"varint,7,opt,name=supports_direction,json=supportsDirection,proto3" json:"supports_direction,omitempty"` - SupportedSpeedCount int32 `protobuf:"varint,8,opt,name=supported_speed_count,json=supportedSpeedCount,proto3" json:"supported_speed_count,omitempty"` - DisabledByDefault bool `protobuf:"varint,9,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - Icon string `protobuf:"bytes,10,opt,name=icon,proto3" json:"icon,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,11,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` - SupportedPresetModes []string `protobuf:"bytes,12,rep,name=supported_preset_modes,json=supportedPresetModes,proto3" json:"supported_preset_modes,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + SupportsOscillation bool `protobuf:"varint,5,opt,name=supports_oscillation,json=supportsOscillation,proto3" json:"supports_oscillation,omitempty"` + SupportsSpeed bool `protobuf:"varint,6,opt,name=supports_speed,json=supportsSpeed,proto3" json:"supports_speed,omitempty"` + SupportsDirection bool `protobuf:"varint,7,opt,name=supports_direction,json=supportsDirection,proto3" json:"supports_direction,omitempty"` + SupportedSpeedCount int32 `protobuf:"varint,8,opt,name=supported_speed_count,json=supportedSpeedCount,proto3" json:"supported_speed_count,omitempty"` + DisabledByDefault bool `protobuf:"varint,9,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + Icon string `protobuf:"bytes,10,opt,name=icon,proto3" json:"icon,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,11,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + SupportedPresetModes []string `protobuf:"bytes,12,rep,name=supported_preset_modes,json=supportedPresetModes,proto3" json:"supported_preset_modes,omitempty"` + DeviceId uint32 `protobuf:"varint,13,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListEntitiesFanResponse) Reset() { *x = ListEntitiesFanResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListEntitiesFanResponse) String() string { @@ -2927,8 +4103,8 @@ func (x *ListEntitiesFanResponse) String() string { func (*ListEntitiesFanResponse) ProtoMessage() {} func (x *ListEntitiesFanResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[21] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2940,7 +4116,7 @@ func (x *ListEntitiesFanResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEntitiesFanResponse.ProtoReflect.Descriptor instead. func (*ListEntitiesFanResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{18} + return file_api_proto_rawDescGZIP(), []int{21} } func (x *ListEntitiesFanResponse) GetObjectId() string { @@ -2964,13 +4140,6 @@ func (x *ListEntitiesFanResponse) GetName() string { return "" } -func (x *ListEntitiesFanResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" -} - func (x *ListEntitiesFanResponse) GetSupportsOscillation() bool { if x != nil { return x.SupportsOscillation @@ -3027,28 +4196,35 @@ func (x *ListEntitiesFanResponse) GetSupportedPresetModes() []string { return nil } +func (x *ListEntitiesFanResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + type FanStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State bool `protobuf:"varint,2,opt,name=state,proto3" json:"state,omitempty"` + Oscillating bool `protobuf:"varint,3,opt,name=oscillating,proto3" json:"oscillating,omitempty"` + // Deprecated in API version 1.6 + // + // Deprecated: Marked as deprecated in api.proto. + Speed FanSpeed `protobuf:"varint,4,opt,name=speed,proto3,enum=FanSpeed" json:"speed,omitempty"` + Direction FanDirection `protobuf:"varint,5,opt,name=direction,proto3,enum=FanDirection" json:"direction,omitempty"` + SpeedLevel int32 `protobuf:"varint,6,opt,name=speed_level,json=speedLevel,proto3" json:"speed_level,omitempty"` + PresetMode string `protobuf:"bytes,7,opt,name=preset_mode,json=presetMode,proto3" json:"preset_mode,omitempty"` + DeviceId uint32 `protobuf:"varint,8,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State bool `protobuf:"varint,2,opt,name=state,proto3" json:"state,omitempty"` - Oscillating bool `protobuf:"varint,3,opt,name=oscillating,proto3" json:"oscillating,omitempty"` - // Deprecated: Do not use. - Speed FanSpeed `protobuf:"varint,4,opt,name=speed,proto3,enum=FanSpeed" json:"speed,omitempty"` - Direction FanDirection `protobuf:"varint,5,opt,name=direction,proto3,enum=FanDirection" json:"direction,omitempty"` - SpeedLevel int32 `protobuf:"varint,6,opt,name=speed_level,json=speedLevel,proto3" json:"speed_level,omitempty"` - PresetMode string `protobuf:"bytes,7,opt,name=preset_mode,json=presetMode,proto3" json:"preset_mode,omitempty"` + sizeCache protoimpl.SizeCache } func (x *FanStateResponse) Reset() { *x = FanStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FanStateResponse) String() string { @@ -3058,8 +4234,8 @@ func (x *FanStateResponse) String() string { func (*FanStateResponse) ProtoMessage() {} func (x *FanStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[22] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3071,7 +4247,7 @@ func (x *FanStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FanStateResponse.ProtoReflect.Descriptor instead. func (*FanStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{19} + return file_api_proto_rawDescGZIP(), []int{22} } func (x *FanStateResponse) GetKey() uint32 { @@ -3095,7 +4271,7 @@ func (x *FanStateResponse) GetOscillating() bool { return false } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in api.proto. func (x *FanStateResponse) GetSpeed() FanSpeed { if x != nil { return x.Speed @@ -3124,17 +4300,25 @@ func (x *FanStateResponse) GetPresetMode() string { return "" } -type FanCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *FanStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - HasState bool `protobuf:"varint,2,opt,name=has_state,json=hasState,proto3" json:"has_state,omitempty"` - State bool `protobuf:"varint,3,opt,name=state,proto3" json:"state,omitempty"` - // Deprecated: Do not use. +type FanCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + HasState bool `protobuf:"varint,2,opt,name=has_state,json=hasState,proto3" json:"has_state,omitempty"` + State bool `protobuf:"varint,3,opt,name=state,proto3" json:"state,omitempty"` + // Deprecated in API version 1.6 + // + // Deprecated: Marked as deprecated in api.proto. HasSpeed bool `protobuf:"varint,4,opt,name=has_speed,json=hasSpeed,proto3" json:"has_speed,omitempty"` - // Deprecated: Do not use. + // Deprecated in API version 1.6 + // + // Deprecated: Marked as deprecated in api.proto. Speed FanSpeed `protobuf:"varint,5,opt,name=speed,proto3,enum=FanSpeed" json:"speed,omitempty"` HasOscillating bool `protobuf:"varint,6,opt,name=has_oscillating,json=hasOscillating,proto3" json:"has_oscillating,omitempty"` Oscillating bool `protobuf:"varint,7,opt,name=oscillating,proto3" json:"oscillating,omitempty"` @@ -3144,15 +4328,16 @@ type FanCommandRequest struct { SpeedLevel int32 `protobuf:"varint,11,opt,name=speed_level,json=speedLevel,proto3" json:"speed_level,omitempty"` HasPresetMode bool `protobuf:"varint,12,opt,name=has_preset_mode,json=hasPresetMode,proto3" json:"has_preset_mode,omitempty"` PresetMode string `protobuf:"bytes,13,opt,name=preset_mode,json=presetMode,proto3" json:"preset_mode,omitempty"` + DeviceId uint32 `protobuf:"varint,14,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FanCommandRequest) Reset() { *x = FanCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FanCommandRequest) String() string { @@ -3162,8 +4347,8 @@ func (x *FanCommandRequest) String() string { func (*FanCommandRequest) ProtoMessage() {} func (x *FanCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[23] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3175,7 +4360,7 @@ func (x *FanCommandRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FanCommandRequest.ProtoReflect.Descriptor instead. func (*FanCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{20} + return file_api_proto_rawDescGZIP(), []int{23} } func (x *FanCommandRequest) GetKey() uint32 { @@ -3199,7 +4384,7 @@ func (x *FanCommandRequest) GetState() bool { return false } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in api.proto. func (x *FanCommandRequest) GetHasSpeed() bool { if x != nil { return x.HasSpeed @@ -3207,7 +4392,7 @@ func (x *FanCommandRequest) GetHasSpeed() bool { return false } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in api.proto. func (x *FanCommandRequest) GetSpeed() FanSpeed { if x != nil { return x.Speed @@ -3271,25 +4456,35 @@ func (x *FanCommandRequest) GetPresetMode() string { return "" } -type ListEntitiesLightResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *FanCommandRequest) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - SupportedColorModes []ColorMode `protobuf:"varint,12,rep,packed,name=supported_color_modes,json=supportedColorModes,proto3,enum=ColorMode" json:"supported_color_modes,omitempty"` +type ListEntitiesLightResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + SupportedColorModes []ColorMode `protobuf:"varint,12,rep,packed,name=supported_color_modes,json=supportedColorModes,proto3,enum=ColorMode" json:"supported_color_modes,omitempty"` // next four supports_* are for legacy clients, newer clients should use color modes + // Deprecated in API version 1.6 // - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in api.proto. LegacySupportsBrightness bool `protobuf:"varint,5,opt,name=legacy_supports_brightness,json=legacySupportsBrightness,proto3" json:"legacy_supports_brightness,omitempty"` - // Deprecated: Do not use. + // Deprecated in API version 1.6 + // + // Deprecated: Marked as deprecated in api.proto. LegacySupportsRgb bool `protobuf:"varint,6,opt,name=legacy_supports_rgb,json=legacySupportsRgb,proto3" json:"legacy_supports_rgb,omitempty"` - // Deprecated: Do not use. + // Deprecated in API version 1.6 + // + // Deprecated: Marked as deprecated in api.proto. LegacySupportsWhiteValue bool `protobuf:"varint,7,opt,name=legacy_supports_white_value,json=legacySupportsWhiteValue,proto3" json:"legacy_supports_white_value,omitempty"` - // Deprecated: Do not use. + // Deprecated in API version 1.6 + // + // Deprecated: Marked as deprecated in api.proto. LegacySupportsColorTemperature bool `protobuf:"varint,8,opt,name=legacy_supports_color_temperature,json=legacySupportsColorTemperature,proto3" json:"legacy_supports_color_temperature,omitempty"` MinMireds float32 `protobuf:"fixed32,9,opt,name=min_mireds,json=minMireds,proto3" json:"min_mireds,omitempty"` MaxMireds float32 `protobuf:"fixed32,10,opt,name=max_mireds,json=maxMireds,proto3" json:"max_mireds,omitempty"` @@ -3297,15 +4492,16 @@ type ListEntitiesLightResponse struct { DisabledByDefault bool `protobuf:"varint,13,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` Icon string `protobuf:"bytes,14,opt,name=icon,proto3" json:"icon,omitempty"` EntityCategory EntityCategory `protobuf:"varint,15,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceId uint32 `protobuf:"varint,16,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListEntitiesLightResponse) Reset() { *x = ListEntitiesLightResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListEntitiesLightResponse) String() string { @@ -3315,8 +4511,8 @@ func (x *ListEntitiesLightResponse) String() string { func (*ListEntitiesLightResponse) ProtoMessage() {} func (x *ListEntitiesLightResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[24] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3328,7 +4524,7 @@ func (x *ListEntitiesLightResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEntitiesLightResponse.ProtoReflect.Descriptor instead. func (*ListEntitiesLightResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{21} + return file_api_proto_rawDescGZIP(), []int{24} } func (x *ListEntitiesLightResponse) GetObjectId() string { @@ -3352,13 +4548,6 @@ func (x *ListEntitiesLightResponse) GetName() string { return "" } -func (x *ListEntitiesLightResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" -} - func (x *ListEntitiesLightResponse) GetSupportedColorModes() []ColorMode { if x != nil { return x.SupportedColorModes @@ -3366,7 +4555,7 @@ func (x *ListEntitiesLightResponse) GetSupportedColorModes() []ColorMode { return nil } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in api.proto. func (x *ListEntitiesLightResponse) GetLegacySupportsBrightness() bool { if x != nil { return x.LegacySupportsBrightness @@ -3374,7 +4563,7 @@ func (x *ListEntitiesLightResponse) GetLegacySupportsBrightness() bool { return false } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in api.proto. func (x *ListEntitiesLightResponse) GetLegacySupportsRgb() bool { if x != nil { return x.LegacySupportsRgb @@ -3382,7 +4571,7 @@ func (x *ListEntitiesLightResponse) GetLegacySupportsRgb() bool { return false } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in api.proto. func (x *ListEntitiesLightResponse) GetLegacySupportsWhiteValue() bool { if x != nil { return x.LegacySupportsWhiteValue @@ -3390,7 +4579,7 @@ func (x *ListEntitiesLightResponse) GetLegacySupportsWhiteValue() bool { return false } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in api.proto. func (x *ListEntitiesLightResponse) GetLegacySupportsColorTemperature() bool { if x != nil { return x.LegacySupportsColorTemperature @@ -3440,33 +4629,38 @@ func (x *ListEntitiesLightResponse) GetEntityCategory() EntityCategory { return EntityCategory_ENTITY_CATEGORY_NONE } -type LightStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesLightResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State bool `protobuf:"varint,2,opt,name=state,proto3" json:"state,omitempty"` - Brightness float32 `protobuf:"fixed32,3,opt,name=brightness,proto3" json:"brightness,omitempty"` - ColorMode ColorMode `protobuf:"varint,11,opt,name=color_mode,json=colorMode,proto3,enum=ColorMode" json:"color_mode,omitempty"` - ColorBrightness float32 `protobuf:"fixed32,10,opt,name=color_brightness,json=colorBrightness,proto3" json:"color_brightness,omitempty"` - Red float32 `protobuf:"fixed32,4,opt,name=red,proto3" json:"red,omitempty"` - Green float32 `protobuf:"fixed32,5,opt,name=green,proto3" json:"green,omitempty"` - Blue float32 `protobuf:"fixed32,6,opt,name=blue,proto3" json:"blue,omitempty"` - White float32 `protobuf:"fixed32,7,opt,name=white,proto3" json:"white,omitempty"` - ColorTemperature float32 `protobuf:"fixed32,8,opt,name=color_temperature,json=colorTemperature,proto3" json:"color_temperature,omitempty"` - ColdWhite float32 `protobuf:"fixed32,12,opt,name=cold_white,json=coldWhite,proto3" json:"cold_white,omitempty"` - WarmWhite float32 `protobuf:"fixed32,13,opt,name=warm_white,json=warmWhite,proto3" json:"warm_white,omitempty"` - Effect string `protobuf:"bytes,9,opt,name=effect,proto3" json:"effect,omitempty"` +type LightStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State bool `protobuf:"varint,2,opt,name=state,proto3" json:"state,omitempty"` + Brightness float32 `protobuf:"fixed32,3,opt,name=brightness,proto3" json:"brightness,omitempty"` + ColorMode ColorMode `protobuf:"varint,11,opt,name=color_mode,json=colorMode,proto3,enum=ColorMode" json:"color_mode,omitempty"` + ColorBrightness float32 `protobuf:"fixed32,10,opt,name=color_brightness,json=colorBrightness,proto3" json:"color_brightness,omitempty"` + Red float32 `protobuf:"fixed32,4,opt,name=red,proto3" json:"red,omitempty"` + Green float32 `protobuf:"fixed32,5,opt,name=green,proto3" json:"green,omitempty"` + Blue float32 `protobuf:"fixed32,6,opt,name=blue,proto3" json:"blue,omitempty"` + White float32 `protobuf:"fixed32,7,opt,name=white,proto3" json:"white,omitempty"` + ColorTemperature float32 `protobuf:"fixed32,8,opt,name=color_temperature,json=colorTemperature,proto3" json:"color_temperature,omitempty"` + ColdWhite float32 `protobuf:"fixed32,12,opt,name=cold_white,json=coldWhite,proto3" json:"cold_white,omitempty"` + WarmWhite float32 `protobuf:"fixed32,13,opt,name=warm_white,json=warmWhite,proto3" json:"warm_white,omitempty"` + Effect string `protobuf:"bytes,9,opt,name=effect,proto3" json:"effect,omitempty"` + DeviceId uint32 `protobuf:"varint,14,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LightStateResponse) Reset() { *x = LightStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LightStateResponse) String() string { @@ -3476,8 +4670,8 @@ func (x *LightStateResponse) String() string { func (*LightStateResponse) ProtoMessage() {} func (x *LightStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[25] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3489,7 +4683,7 @@ func (x *LightStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LightStateResponse.ProtoReflect.Descriptor instead. func (*LightStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{22} + return file_api_proto_rawDescGZIP(), []int{25} } func (x *LightStateResponse) GetKey() uint32 { @@ -3583,47 +4777,52 @@ func (x *LightStateResponse) GetEffect() string { return "" } -type LightCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *LightStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - HasState bool `protobuf:"varint,2,opt,name=has_state,json=hasState,proto3" json:"has_state,omitempty"` - State bool `protobuf:"varint,3,opt,name=state,proto3" json:"state,omitempty"` - HasBrightness bool `protobuf:"varint,4,opt,name=has_brightness,json=hasBrightness,proto3" json:"has_brightness,omitempty"` - Brightness float32 `protobuf:"fixed32,5,opt,name=brightness,proto3" json:"brightness,omitempty"` - HasColorMode bool `protobuf:"varint,22,opt,name=has_color_mode,json=hasColorMode,proto3" json:"has_color_mode,omitempty"` - ColorMode ColorMode `protobuf:"varint,23,opt,name=color_mode,json=colorMode,proto3,enum=ColorMode" json:"color_mode,omitempty"` - HasColorBrightness bool `protobuf:"varint,20,opt,name=has_color_brightness,json=hasColorBrightness,proto3" json:"has_color_brightness,omitempty"` - ColorBrightness float32 `protobuf:"fixed32,21,opt,name=color_brightness,json=colorBrightness,proto3" json:"color_brightness,omitempty"` - HasRgb bool `protobuf:"varint,6,opt,name=has_rgb,json=hasRgb,proto3" json:"has_rgb,omitempty"` - Red float32 `protobuf:"fixed32,7,opt,name=red,proto3" json:"red,omitempty"` - Green float32 `protobuf:"fixed32,8,opt,name=green,proto3" json:"green,omitempty"` - Blue float32 `protobuf:"fixed32,9,opt,name=blue,proto3" json:"blue,omitempty"` - HasWhite bool `protobuf:"varint,10,opt,name=has_white,json=hasWhite,proto3" json:"has_white,omitempty"` - White float32 `protobuf:"fixed32,11,opt,name=white,proto3" json:"white,omitempty"` - HasColorTemperature bool `protobuf:"varint,12,opt,name=has_color_temperature,json=hasColorTemperature,proto3" json:"has_color_temperature,omitempty"` - ColorTemperature float32 `protobuf:"fixed32,13,opt,name=color_temperature,json=colorTemperature,proto3" json:"color_temperature,omitempty"` - HasColdWhite bool `protobuf:"varint,24,opt,name=has_cold_white,json=hasColdWhite,proto3" json:"has_cold_white,omitempty"` - ColdWhite float32 `protobuf:"fixed32,25,opt,name=cold_white,json=coldWhite,proto3" json:"cold_white,omitempty"` - HasWarmWhite bool `protobuf:"varint,26,opt,name=has_warm_white,json=hasWarmWhite,proto3" json:"has_warm_white,omitempty"` - WarmWhite float32 `protobuf:"fixed32,27,opt,name=warm_white,json=warmWhite,proto3" json:"warm_white,omitempty"` - HasTransitionLength bool `protobuf:"varint,14,opt,name=has_transition_length,json=hasTransitionLength,proto3" json:"has_transition_length,omitempty"` - TransitionLength uint32 `protobuf:"varint,15,opt,name=transition_length,json=transitionLength,proto3" json:"transition_length,omitempty"` - HasFlashLength bool `protobuf:"varint,16,opt,name=has_flash_length,json=hasFlashLength,proto3" json:"has_flash_length,omitempty"` - FlashLength uint32 `protobuf:"varint,17,opt,name=flash_length,json=flashLength,proto3" json:"flash_length,omitempty"` - HasEffect bool `protobuf:"varint,18,opt,name=has_effect,json=hasEffect,proto3" json:"has_effect,omitempty"` - Effect string `protobuf:"bytes,19,opt,name=effect,proto3" json:"effect,omitempty"` +type LightCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + HasState bool `protobuf:"varint,2,opt,name=has_state,json=hasState,proto3" json:"has_state,omitempty"` + State bool `protobuf:"varint,3,opt,name=state,proto3" json:"state,omitempty"` + HasBrightness bool `protobuf:"varint,4,opt,name=has_brightness,json=hasBrightness,proto3" json:"has_brightness,omitempty"` + Brightness float32 `protobuf:"fixed32,5,opt,name=brightness,proto3" json:"brightness,omitempty"` + HasColorMode bool `protobuf:"varint,22,opt,name=has_color_mode,json=hasColorMode,proto3" json:"has_color_mode,omitempty"` + ColorMode ColorMode `protobuf:"varint,23,opt,name=color_mode,json=colorMode,proto3,enum=ColorMode" json:"color_mode,omitempty"` + HasColorBrightness bool `protobuf:"varint,20,opt,name=has_color_brightness,json=hasColorBrightness,proto3" json:"has_color_brightness,omitempty"` + ColorBrightness float32 `protobuf:"fixed32,21,opt,name=color_brightness,json=colorBrightness,proto3" json:"color_brightness,omitempty"` + HasRgb bool `protobuf:"varint,6,opt,name=has_rgb,json=hasRgb,proto3" json:"has_rgb,omitempty"` + Red float32 `protobuf:"fixed32,7,opt,name=red,proto3" json:"red,omitempty"` + Green float32 `protobuf:"fixed32,8,opt,name=green,proto3" json:"green,omitempty"` + Blue float32 `protobuf:"fixed32,9,opt,name=blue,proto3" json:"blue,omitempty"` + HasWhite bool `protobuf:"varint,10,opt,name=has_white,json=hasWhite,proto3" json:"has_white,omitempty"` + White float32 `protobuf:"fixed32,11,opt,name=white,proto3" json:"white,omitempty"` + HasColorTemperature bool `protobuf:"varint,12,opt,name=has_color_temperature,json=hasColorTemperature,proto3" json:"has_color_temperature,omitempty"` + ColorTemperature float32 `protobuf:"fixed32,13,opt,name=color_temperature,json=colorTemperature,proto3" json:"color_temperature,omitempty"` + HasColdWhite bool `protobuf:"varint,24,opt,name=has_cold_white,json=hasColdWhite,proto3" json:"has_cold_white,omitempty"` + ColdWhite float32 `protobuf:"fixed32,25,opt,name=cold_white,json=coldWhite,proto3" json:"cold_white,omitempty"` + HasWarmWhite bool `protobuf:"varint,26,opt,name=has_warm_white,json=hasWarmWhite,proto3" json:"has_warm_white,omitempty"` + WarmWhite float32 `protobuf:"fixed32,27,opt,name=warm_white,json=warmWhite,proto3" json:"warm_white,omitempty"` + HasTransitionLength bool `protobuf:"varint,14,opt,name=has_transition_length,json=hasTransitionLength,proto3" json:"has_transition_length,omitempty"` + TransitionLength uint32 `protobuf:"varint,15,opt,name=transition_length,json=transitionLength,proto3" json:"transition_length,omitempty"` + HasFlashLength bool `protobuf:"varint,16,opt,name=has_flash_length,json=hasFlashLength,proto3" json:"has_flash_length,omitempty"` + FlashLength uint32 `protobuf:"varint,17,opt,name=flash_length,json=flashLength,proto3" json:"flash_length,omitempty"` + HasEffect bool `protobuf:"varint,18,opt,name=has_effect,json=hasEffect,proto3" json:"has_effect,omitempty"` + Effect string `protobuf:"bytes,19,opt,name=effect,proto3" json:"effect,omitempty"` + DeviceId uint32 `protobuf:"varint,28,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LightCommandRequest) Reset() { *x = LightCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LightCommandRequest) String() string { @@ -3633,8 +4832,8 @@ func (x *LightCommandRequest) String() string { func (*LightCommandRequest) ProtoMessage() {} func (x *LightCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[26] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3646,7 +4845,7 @@ func (x *LightCommandRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LightCommandRequest.ProtoReflect.Descriptor instead. func (*LightCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{23} + return file_api_proto_rawDescGZIP(), []int{26} } func (x *LightCommandRequest) GetKey() uint32 { @@ -3838,34 +5037,41 @@ func (x *LightCommandRequest) GetEffect() string { return "" } -type ListEntitiesSensorResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *LightCommandRequest) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - UnitOfMeasurement string `protobuf:"bytes,6,opt,name=unit_of_measurement,json=unitOfMeasurement,proto3" json:"unit_of_measurement,omitempty"` - AccuracyDecimals int32 `protobuf:"varint,7,opt,name=accuracy_decimals,json=accuracyDecimals,proto3" json:"accuracy_decimals,omitempty"` - ForceUpdate bool `protobuf:"varint,8,opt,name=force_update,json=forceUpdate,proto3" json:"force_update,omitempty"` - DeviceClass string `protobuf:"bytes,9,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` - StateClass SensorStateClass `protobuf:"varint,10,opt,name=state_class,json=stateClass,proto3,enum=SensorStateClass" json:"state_class,omitempty"` +type ListEntitiesSensorResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + UnitOfMeasurement string `protobuf:"bytes,6,opt,name=unit_of_measurement,json=unitOfMeasurement,proto3" json:"unit_of_measurement,omitempty"` + AccuracyDecimals int32 `protobuf:"varint,7,opt,name=accuracy_decimals,json=accuracyDecimals,proto3" json:"accuracy_decimals,omitempty"` + ForceUpdate bool `protobuf:"varint,8,opt,name=force_update,json=forceUpdate,proto3" json:"force_update,omitempty"` + DeviceClass string `protobuf:"bytes,9,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + StateClass SensorStateClass `protobuf:"varint,10,opt,name=state_class,json=stateClass,proto3,enum=SensorStateClass" json:"state_class,omitempty"` // Last reset type removed in 2021.9.0 + // Deprecated in API version 1.5 + // + // Deprecated: Marked as deprecated in api.proto. LegacyLastResetType SensorLastResetType `protobuf:"varint,11,opt,name=legacy_last_reset_type,json=legacyLastResetType,proto3,enum=SensorLastResetType" json:"legacy_last_reset_type,omitempty"` DisabledByDefault bool `protobuf:"varint,12,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` EntityCategory EntityCategory `protobuf:"varint,13,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceId uint32 `protobuf:"varint,14,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListEntitiesSensorResponse) Reset() { *x = ListEntitiesSensorResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListEntitiesSensorResponse) String() string { @@ -3875,8 +5081,8 @@ func (x *ListEntitiesSensorResponse) String() string { func (*ListEntitiesSensorResponse) ProtoMessage() {} func (x *ListEntitiesSensorResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[27] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3888,7 +5094,7 @@ func (x *ListEntitiesSensorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEntitiesSensorResponse.ProtoReflect.Descriptor instead. func (*ListEntitiesSensorResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{24} + return file_api_proto_rawDescGZIP(), []int{27} } func (x *ListEntitiesSensorResponse) GetObjectId() string { @@ -3912,13 +5118,6 @@ func (x *ListEntitiesSensorResponse) GetName() string { return "" } -func (x *ListEntitiesSensorResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" -} - func (x *ListEntitiesSensorResponse) GetIcon() string { if x != nil { return x.Icon @@ -3961,6 +5160,7 @@ func (x *ListEntitiesSensorResponse) GetStateClass() SensorStateClass { return SensorStateClass_STATE_CLASS_NONE } +// Deprecated: Marked as deprecated in api.proto. func (x *ListEntitiesSensorResponse) GetLegacyLastResetType() SensorLastResetType { if x != nil { return x.LegacyLastResetType @@ -3982,25 +5182,30 @@ func (x *ListEntitiesSensorResponse) GetEntityCategory() EntityCategory { return EntityCategory_ENTITY_CATEGORY_NONE } -type SensorStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesSensorResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State float32 `protobuf:"fixed32,2,opt,name=state,proto3" json:"state,omitempty"` +type SensorStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State float32 `protobuf:"fixed32,2,opt,name=state,proto3" json:"state,omitempty"` // If the sensor does not have a valid state yet. // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller - MissingState bool `protobuf:"varint,3,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` + MissingState bool `protobuf:"varint,3,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` + DeviceId uint32 `protobuf:"varint,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SensorStateResponse) Reset() { *x = SensorStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SensorStateResponse) String() string { @@ -4010,8 +5215,8 @@ func (x *SensorStateResponse) String() string { func (*SensorStateResponse) ProtoMessage() {} func (x *SensorStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[28] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4023,7 +5228,7 @@ func (x *SensorStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SensorStateResponse.ProtoReflect.Descriptor instead. func (*SensorStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{25} + return file_api_proto_rawDescGZIP(), []int{28} } func (x *SensorStateResponse) GetKey() uint32 { @@ -4047,30 +5252,34 @@ func (x *SensorStateResponse) GetMissingState() bool { return false } +func (x *SensorStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + // ==================== SWITCH ==================== type ListEntitiesSwitchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - AssumedState bool `protobuf:"varint,6,opt,name=assumed_state,json=assumedState,proto3" json:"assumed_state,omitempty"` - DisabledByDefault bool `protobuf:"varint,7,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,8,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` - DeviceClass string `protobuf:"bytes,9,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + AssumedState bool `protobuf:"varint,6,opt,name=assumed_state,json=assumedState,proto3" json:"assumed_state,omitempty"` + DisabledByDefault bool `protobuf:"varint,7,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,8,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceClass string `protobuf:"bytes,9,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + DeviceId uint32 `protobuf:"varint,10,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListEntitiesSwitchResponse) Reset() { *x = ListEntitiesSwitchResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListEntitiesSwitchResponse) String() string { @@ -4080,8 +5289,8 @@ func (x *ListEntitiesSwitchResponse) String() string { func (*ListEntitiesSwitchResponse) ProtoMessage() {} func (x *ListEntitiesSwitchResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[29] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4093,7 +5302,7 @@ func (x *ListEntitiesSwitchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEntitiesSwitchResponse.ProtoReflect.Descriptor instead. func (*ListEntitiesSwitchResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{26} + return file_api_proto_rawDescGZIP(), []int{29} } func (x *ListEntitiesSwitchResponse) GetObjectId() string { @@ -4117,13 +5326,6 @@ func (x *ListEntitiesSwitchResponse) GetName() string { return "" } -func (x *ListEntitiesSwitchResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" -} - func (x *ListEntitiesSwitchResponse) GetIcon() string { if x != nil { return x.Icon @@ -4159,22 +5361,27 @@ func (x *ListEntitiesSwitchResponse) GetDeviceClass() string { return "" } +func (x *ListEntitiesSwitchResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + type SwitchStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State bool `protobuf:"varint,2,opt,name=state,proto3" json:"state,omitempty"` + DeviceId uint32 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State bool `protobuf:"varint,2,opt,name=state,proto3" json:"state,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SwitchStateResponse) Reset() { *x = SwitchStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SwitchStateResponse) String() string { @@ -4184,8 +5391,8 @@ func (x *SwitchStateResponse) String() string { func (*SwitchStateResponse) ProtoMessage() {} func (x *SwitchStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[30] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4197,7 +5404,7 @@ func (x *SwitchStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SwitchStateResponse.ProtoReflect.Descriptor instead. func (*SwitchStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{27} + return file_api_proto_rawDescGZIP(), []int{30} } func (x *SwitchStateResponse) GetKey() uint32 { @@ -4214,22 +5421,27 @@ func (x *SwitchStateResponse) GetState() bool { return false } +func (x *SwitchStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + type SwitchCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State bool `protobuf:"varint,2,opt,name=state,proto3" json:"state,omitempty"` + DeviceId uint32 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State bool `protobuf:"varint,2,opt,name=state,proto3" json:"state,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SwitchCommandRequest) Reset() { *x = SwitchCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SwitchCommandRequest) String() string { @@ -4239,8 +5451,8 @@ func (x *SwitchCommandRequest) String() string { func (*SwitchCommandRequest) ProtoMessage() {} func (x *SwitchCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[31] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4252,7 +5464,7 @@ func (x *SwitchCommandRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SwitchCommandRequest.ProtoReflect.Descriptor instead. func (*SwitchCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{28} + return file_api_proto_rawDescGZIP(), []int{31} } func (x *SwitchCommandRequest) GetKey() uint32 { @@ -4269,29 +5481,33 @@ func (x *SwitchCommandRequest) GetState() bool { return false } +func (x *SwitchCommandRequest) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + // ==================== TEXT SENSOR ==================== type ListEntitiesTextSensorResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` - DeviceClass string `protobuf:"bytes,8,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceClass string `protobuf:"bytes,8,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + DeviceId uint32 `protobuf:"varint,9,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListEntitiesTextSensorResponse) Reset() { *x = ListEntitiesTextSensorResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListEntitiesTextSensorResponse) String() string { @@ -4301,8 +5517,8 @@ func (x *ListEntitiesTextSensorResponse) String() string { func (*ListEntitiesTextSensorResponse) ProtoMessage() {} func (x *ListEntitiesTextSensorResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[32] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4314,7 +5530,7 @@ func (x *ListEntitiesTextSensorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEntitiesTextSensorResponse.ProtoReflect.Descriptor instead. func (*ListEntitiesTextSensorResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{29} + return file_api_proto_rawDescGZIP(), []int{32} } func (x *ListEntitiesTextSensorResponse) GetObjectId() string { @@ -4338,13 +5554,6 @@ func (x *ListEntitiesTextSensorResponse) GetName() string { return "" } -func (x *ListEntitiesTextSensorResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" -} - func (x *ListEntitiesTextSensorResponse) GetIcon() string { if x != nil { return x.Icon @@ -4373,25 +5582,30 @@ func (x *ListEntitiesTextSensorResponse) GetDeviceClass() string { return "" } -type TextSensorStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesTextSensorResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` +type TextSensorStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` // If the text sensor does not have a valid state yet. // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller - MissingState bool `protobuf:"varint,3,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` + MissingState bool `protobuf:"varint,3,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` + DeviceId uint32 `protobuf:"varint,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TextSensorStateResponse) Reset() { *x = TextSensorStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TextSensorStateResponse) String() string { @@ -4401,8 +5615,8 @@ func (x *TextSensorStateResponse) String() string { func (*TextSensorStateResponse) ProtoMessage() {} func (x *TextSensorStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[33] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4414,7 +5628,7 @@ func (x *TextSensorStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TextSensorStateResponse.ProtoReflect.Descriptor instead. func (*TextSensorStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{30} + return file_api_proto_rawDescGZIP(), []int{33} } func (x *TextSensorStateResponse) GetKey() uint32 { @@ -4438,22 +5652,26 @@ func (x *TextSensorStateResponse) GetMissingState() bool { return false } +func (x *TextSensorStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + type SubscribeLogsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Level LogLevel `protobuf:"varint,1,opt,name=level,proto3,enum=LogLevel" json:"level,omitempty"` + DumpConfig bool `protobuf:"varint,2,opt,name=dump_config,json=dumpConfig,proto3" json:"dump_config,omitempty"` unknownFields protoimpl.UnknownFields - - Level LogLevel `protobuf:"varint,1,opt,name=level,proto3,enum=LogLevel" json:"level,omitempty"` - DumpConfig bool `protobuf:"varint,2,opt,name=dump_config,json=dumpConfig,proto3" json:"dump_config,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SubscribeLogsRequest) Reset() { *x = SubscribeLogsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeLogsRequest) String() string { @@ -4463,8 +5681,8 @@ func (x *SubscribeLogsRequest) String() string { func (*SubscribeLogsRequest) ProtoMessage() {} func (x *SubscribeLogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[34] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4476,7 +5694,7 @@ func (x *SubscribeLogsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeLogsRequest.ProtoReflect.Descriptor instead. func (*SubscribeLogsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{31} + return file_api_proto_rawDescGZIP(), []int{34} } func (x *SubscribeLogsRequest) GetLevel() LogLevel { @@ -4494,22 +5712,18 @@ func (x *SubscribeLogsRequest) GetDumpConfig() bool { } type SubscribeLogsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Level LogLevel `protobuf:"varint,1,opt,name=level,proto3,enum=LogLevel" json:"level,omitempty"` + Message []byte `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - Level LogLevel `protobuf:"varint,1,opt,name=level,proto3,enum=LogLevel" json:"level,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` - SendFailed bool `protobuf:"varint,4,opt,name=send_failed,json=sendFailed,proto3" json:"send_failed,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SubscribeLogsResponse) Reset() { *x = SubscribeLogsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeLogsResponse) String() string { @@ -4519,8 +5733,8 @@ func (x *SubscribeLogsResponse) String() string { func (*SubscribeLogsResponse) ProtoMessage() {} func (x *SubscribeLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[35] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4532,7 +5746,7 @@ func (x *SubscribeLogsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeLogsResponse.ProtoReflect.Descriptor instead. func (*SubscribeLogsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{32} + return file_api_proto_rawDescGZIP(), []int{35} } func (x *SubscribeLogsResponse) GetLevel() LogLevel { @@ -4542,34 +5756,114 @@ func (x *SubscribeLogsResponse) GetLevel() LogLevel { return LogLevel_LOG_LEVEL_NONE } -func (x *SubscribeLogsResponse) GetMessage() string { +func (x *SubscribeLogsResponse) GetMessage() []byte { if x != nil { return x.Message } - return "" + return nil +} + +// ==================== NOISE ENCRYPTION ==================== +type NoiseEncryptionSetKeyRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NoiseEncryptionSetKeyRequest) Reset() { + *x = NoiseEncryptionSetKeyRequest{} + mi := &file_api_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NoiseEncryptionSetKeyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NoiseEncryptionSetKeyRequest) ProtoMessage() {} + +func (x *NoiseEncryptionSetKeyRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[36] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NoiseEncryptionSetKeyRequest.ProtoReflect.Descriptor instead. +func (*NoiseEncryptionSetKeyRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{36} +} + +func (x *NoiseEncryptionSetKeyRequest) GetKey() []byte { + if x != nil { + return x.Key + } + return nil +} + +type NoiseEncryptionSetKeyResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NoiseEncryptionSetKeyResponse) Reset() { + *x = NoiseEncryptionSetKeyResponse{} + mi := &file_api_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *SubscribeLogsResponse) GetSendFailed() bool { +func (x *NoiseEncryptionSetKeyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NoiseEncryptionSetKeyResponse) ProtoMessage() {} + +func (x *NoiseEncryptionSetKeyResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[37] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NoiseEncryptionSetKeyResponse.ProtoReflect.Descriptor instead. +func (*NoiseEncryptionSetKeyResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{37} +} + +func (x *NoiseEncryptionSetKeyResponse) GetSuccess() bool { if x != nil { - return x.SendFailed + return x.Success } return false } // ==================== HOMEASSISTANT.SERVICE ==================== type SubscribeHomeassistantServicesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubscribeHomeassistantServicesRequest) Reset() { *x = SubscribeHomeassistantServicesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeHomeassistantServicesRequest) String() string { @@ -4579,8 +5873,8 @@ func (x *SubscribeHomeassistantServicesRequest) String() string { func (*SubscribeHomeassistantServicesRequest) ProtoMessage() {} func (x *SubscribeHomeassistantServicesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[38] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4592,25 +5886,22 @@ func (x *SubscribeHomeassistantServicesRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use SubscribeHomeassistantServicesRequest.ProtoReflect.Descriptor instead. func (*SubscribeHomeassistantServicesRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{33} + return file_api_proto_rawDescGZIP(), []int{38} } type HomeassistantServiceMap struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *HomeassistantServiceMap) Reset() { *x = HomeassistantServiceMap{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HomeassistantServiceMap) String() string { @@ -4620,8 +5911,8 @@ func (x *HomeassistantServiceMap) String() string { func (*HomeassistantServiceMap) ProtoMessage() {} func (x *HomeassistantServiceMap) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[39] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4633,7 +5924,7 @@ func (x *HomeassistantServiceMap) ProtoReflect() protoreflect.Message { // Deprecated: Use HomeassistantServiceMap.ProtoReflect.Descriptor instead. func (*HomeassistantServiceMap) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{34} + return file_api_proto_rawDescGZIP(), []int{39} } func (x *HomeassistantServiceMap) GetKey() string { @@ -4650,36 +5941,36 @@ func (x *HomeassistantServiceMap) GetValue() string { return "" } -type HomeassistantServiceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` - Data []*HomeassistantServiceMap `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"` - DataTemplate []*HomeassistantServiceMap `protobuf:"bytes,3,rep,name=data_template,json=dataTemplate,proto3" json:"data_template,omitempty"` - Variables []*HomeassistantServiceMap `protobuf:"bytes,4,rep,name=variables,proto3" json:"variables,omitempty"` - IsEvent bool `protobuf:"varint,5,opt,name=is_event,json=isEvent,proto3" json:"is_event,omitempty"` +type HomeassistantActionRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + Data []*HomeassistantServiceMap `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"` + DataTemplate []*HomeassistantServiceMap `protobuf:"bytes,3,rep,name=data_template,json=dataTemplate,proto3" json:"data_template,omitempty"` + Variables []*HomeassistantServiceMap `protobuf:"bytes,4,rep,name=variables,proto3" json:"variables,omitempty"` + IsEvent bool `protobuf:"varint,5,opt,name=is_event,json=isEvent,proto3" json:"is_event,omitempty"` + CallId uint32 `protobuf:"varint,6,opt,name=call_id,json=callId,proto3" json:"call_id,omitempty"` + WantsResponse bool `protobuf:"varint,7,opt,name=wants_response,json=wantsResponse,proto3" json:"wants_response,omitempty"` + ResponseTemplate string `protobuf:"bytes,8,opt,name=response_template,json=responseTemplate,proto3" json:"response_template,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *HomeassistantServiceResponse) Reset() { - *x = HomeassistantServiceResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *HomeassistantActionRequest) Reset() { + *x = HomeassistantActionRequest{} + mi := &file_api_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *HomeassistantServiceResponse) String() string { +func (x *HomeassistantActionRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HomeassistantServiceResponse) ProtoMessage() {} +func (*HomeassistantActionRequest) ProtoMessage() {} -func (x *HomeassistantServiceResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { +func (x *HomeassistantActionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[40] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4689,63 +5980,151 @@ func (x *HomeassistantServiceResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use HomeassistantServiceResponse.ProtoReflect.Descriptor instead. -func (*HomeassistantServiceResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{35} +// Deprecated: Use HomeassistantActionRequest.ProtoReflect.Descriptor instead. +func (*HomeassistantActionRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{40} } -func (x *HomeassistantServiceResponse) GetService() string { +func (x *HomeassistantActionRequest) GetService() string { if x != nil { return x.Service } return "" } -func (x *HomeassistantServiceResponse) GetData() []*HomeassistantServiceMap { +func (x *HomeassistantActionRequest) GetData() []*HomeassistantServiceMap { if x != nil { return x.Data } return nil } -func (x *HomeassistantServiceResponse) GetDataTemplate() []*HomeassistantServiceMap { +func (x *HomeassistantActionRequest) GetDataTemplate() []*HomeassistantServiceMap { if x != nil { return x.DataTemplate } return nil } -func (x *HomeassistantServiceResponse) GetVariables() []*HomeassistantServiceMap { +func (x *HomeassistantActionRequest) GetVariables() []*HomeassistantServiceMap { if x != nil { return x.Variables } return nil } -func (x *HomeassistantServiceResponse) GetIsEvent() bool { +func (x *HomeassistantActionRequest) GetIsEvent() bool { if x != nil { return x.IsEvent } return false } +func (x *HomeassistantActionRequest) GetCallId() uint32 { + if x != nil { + return x.CallId + } + return 0 +} + +func (x *HomeassistantActionRequest) GetWantsResponse() bool { + if x != nil { + return x.WantsResponse + } + return false +} + +func (x *HomeassistantActionRequest) GetResponseTemplate() string { + if x != nil { + return x.ResponseTemplate + } + return "" +} + +// Message sent by Home Assistant to ESPHome with service call response data +type HomeassistantActionResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + CallId uint32 `protobuf:"varint,1,opt,name=call_id,json=callId,proto3" json:"call_id,omitempty"` // Matches the call_id from HomeassistantActionRequest + Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"` // Whether the service call succeeded + ErrorMessage string `protobuf:"bytes,3,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` // Error message if success = false + ResponseData []byte `protobuf:"bytes,4,opt,name=response_data,json=responseData,proto3" json:"response_data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HomeassistantActionResponse) Reset() { + *x = HomeassistantActionResponse{} + mi := &file_api_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HomeassistantActionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HomeassistantActionResponse) ProtoMessage() {} + +func (x *HomeassistantActionResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[41] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HomeassistantActionResponse.ProtoReflect.Descriptor instead. +func (*HomeassistantActionResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{41} +} + +func (x *HomeassistantActionResponse) GetCallId() uint32 { + if x != nil { + return x.CallId + } + return 0 +} + +func (x *HomeassistantActionResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *HomeassistantActionResponse) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +func (x *HomeassistantActionResponse) GetResponseData() []byte { + if x != nil { + return x.ResponseData + } + return nil +} + // ==================== IMPORT HOME ASSISTANT STATES ==================== // 1. Client sends SubscribeHomeAssistantStatesRequest // 2. Server responds with zero or more SubscribeHomeAssistantStateResponse (async) // 3. Client sends HomeAssistantStateResponse for state changes. type SubscribeHomeAssistantStatesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubscribeHomeAssistantStatesRequest) Reset() { *x = SubscribeHomeAssistantStatesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeHomeAssistantStatesRequest) String() string { @@ -4755,8 +6134,8 @@ func (x *SubscribeHomeAssistantStatesRequest) String() string { func (*SubscribeHomeAssistantStatesRequest) ProtoMessage() {} func (x *SubscribeHomeAssistantStatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[42] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4768,25 +6147,23 @@ func (x *SubscribeHomeAssistantStatesRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use SubscribeHomeAssistantStatesRequest.ProtoReflect.Descriptor instead. func (*SubscribeHomeAssistantStatesRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{36} + return file_api_proto_rawDescGZIP(), []int{42} } type SubscribeHomeAssistantStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` + Attribute string `protobuf:"bytes,2,opt,name=attribute,proto3" json:"attribute,omitempty"` + Once bool `protobuf:"varint,3,opt,name=once,proto3" json:"once,omitempty"` unknownFields protoimpl.UnknownFields - - EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` - Attribute string `protobuf:"bytes,2,opt,name=attribute,proto3" json:"attribute,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SubscribeHomeAssistantStateResponse) Reset() { *x = SubscribeHomeAssistantStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeHomeAssistantStateResponse) String() string { @@ -4796,8 +6173,8 @@ func (x *SubscribeHomeAssistantStateResponse) String() string { func (*SubscribeHomeAssistantStateResponse) ProtoMessage() {} func (x *SubscribeHomeAssistantStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[43] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4809,7 +6186,7 @@ func (x *SubscribeHomeAssistantStateResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use SubscribeHomeAssistantStateResponse.ProtoReflect.Descriptor instead. func (*SubscribeHomeAssistantStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{37} + return file_api_proto_rawDescGZIP(), []int{43} } func (x *SubscribeHomeAssistantStateResponse) GetEntityId() string { @@ -4826,23 +6203,27 @@ func (x *SubscribeHomeAssistantStateResponse) GetAttribute() string { return "" } +func (x *SubscribeHomeAssistantStateResponse) GetOnce() bool { + if x != nil { + return x.Once + } + return false +} + type HomeAssistantStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` + State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + Attribute string `protobuf:"bytes,3,opt,name=attribute,proto3" json:"attribute,omitempty"` unknownFields protoimpl.UnknownFields - - EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` - State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` - Attribute string `protobuf:"bytes,3,opt,name=attribute,proto3" json:"attribute,omitempty"` + sizeCache protoimpl.SizeCache } func (x *HomeAssistantStateResponse) Reset() { *x = HomeAssistantStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HomeAssistantStateResponse) String() string { @@ -4852,8 +6233,8 @@ func (x *HomeAssistantStateResponse) String() string { func (*HomeAssistantStateResponse) ProtoMessage() {} func (x *HomeAssistantStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[38] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[44] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4865,7 +6246,7 @@ func (x *HomeAssistantStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use HomeAssistantStateResponse.ProtoReflect.Descriptor instead. func (*HomeAssistantStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{38} + return file_api_proto_rawDescGZIP(), []int{44} } func (x *HomeAssistantStateResponse) GetEntityId() string { @@ -4891,18 +6272,16 @@ func (x *HomeAssistantStateResponse) GetAttribute() string { // ==================== IMPORT TIME ==================== type GetTimeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetTimeRequest) Reset() { *x = GetTimeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTimeRequest) String() string { @@ -4912,8 +6291,8 @@ func (x *GetTimeRequest) String() string { func (*GetTimeRequest) ProtoMessage() {} func (x *GetTimeRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[39] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[45] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4925,24 +6304,175 @@ func (x *GetTimeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTimeRequest.ProtoReflect.Descriptor instead. func (*GetTimeRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{39} + return file_api_proto_rawDescGZIP(), []int{45} } -type GetTimeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type DSTRule struct { + state protoimpl.MessageState `protogen:"open.v1"` + TimeSeconds int32 `protobuf:"zigzag32,1,opt,name=time_seconds,json=timeSeconds,proto3" json:"time_seconds,omitempty"` + Day uint32 `protobuf:"varint,2,opt,name=day,proto3" json:"day,omitempty"` + Type DSTRuleType `protobuf:"varint,3,opt,name=type,proto3,enum=DSTRuleType" json:"type,omitempty"` + Month uint32 `protobuf:"varint,4,opt,name=month,proto3" json:"month,omitempty"` + Week uint32 `protobuf:"varint,5,opt,name=week,proto3" json:"week,omitempty"` + DayOfWeek uint32 `protobuf:"varint,6,opt,name=day_of_week,json=dayOfWeek,proto3" json:"day_of_week,omitempty"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - EpochSeconds uint32 `protobuf:"fixed32,1,opt,name=epoch_seconds,json=epochSeconds,proto3" json:"epoch_seconds,omitempty"` +func (x *DSTRule) Reset() { + *x = DSTRule{} + mi := &file_api_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *GetTimeResponse) Reset() { - *x = GetTimeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[40] +func (x *DSTRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DSTRule) ProtoMessage() {} + +func (x *DSTRule) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[46] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DSTRule.ProtoReflect.Descriptor instead. +func (*DSTRule) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{46} +} + +func (x *DSTRule) GetTimeSeconds() int32 { + if x != nil { + return x.TimeSeconds + } + return 0 +} + +func (x *DSTRule) GetDay() uint32 { + if x != nil { + return x.Day + } + return 0 +} + +func (x *DSTRule) GetType() DSTRuleType { + if x != nil { + return x.Type + } + return DSTRuleType_DST_RULE_TYPE_NONE +} + +func (x *DSTRule) GetMonth() uint32 { + if x != nil { + return x.Month + } + return 0 +} + +func (x *DSTRule) GetWeek() uint32 { + if x != nil { + return x.Week + } + return 0 +} + +func (x *DSTRule) GetDayOfWeek() uint32 { + if x != nil { + return x.DayOfWeek + } + return 0 +} + +type ParsedTimezone struct { + state protoimpl.MessageState `protogen:"open.v1"` + StdOffsetSeconds int32 `protobuf:"zigzag32,1,opt,name=std_offset_seconds,json=stdOffsetSeconds,proto3" json:"std_offset_seconds,omitempty"` + DstOffsetSeconds int32 `protobuf:"zigzag32,2,opt,name=dst_offset_seconds,json=dstOffsetSeconds,proto3" json:"dst_offset_seconds,omitempty"` + DstStart *DSTRule `protobuf:"bytes,3,opt,name=dst_start,json=dstStart,proto3" json:"dst_start,omitempty"` + DstEnd *DSTRule `protobuf:"bytes,4,opt,name=dst_end,json=dstEnd,proto3" json:"dst_end,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ParsedTimezone) Reset() { + *x = ParsedTimezone{} + mi := &file_api_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ParsedTimezone) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ParsedTimezone) ProtoMessage() {} + +func (x *ParsedTimezone) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[47] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ParsedTimezone.ProtoReflect.Descriptor instead. +func (*ParsedTimezone) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{47} +} + +func (x *ParsedTimezone) GetStdOffsetSeconds() int32 { + if x != nil { + return x.StdOffsetSeconds + } + return 0 +} + +func (x *ParsedTimezone) GetDstOffsetSeconds() int32 { + if x != nil { + return x.DstOffsetSeconds + } + return 0 +} + +func (x *ParsedTimezone) GetDstStart() *DSTRule { + if x != nil { + return x.DstStart + } + return nil +} + +func (x *ParsedTimezone) GetDstEnd() *DSTRule { + if x != nil { + return x.DstEnd } + return nil +} + +type GetTimeResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + EpochSeconds uint32 `protobuf:"fixed32,1,opt,name=epoch_seconds,json=epochSeconds,proto3" json:"epoch_seconds,omitempty"` + Timezone string `protobuf:"bytes,2,opt,name=timezone,proto3" json:"timezone,omitempty"` + ParsedTimezone *ParsedTimezone `protobuf:"bytes,3,opt,name=parsed_timezone,json=parsedTimezone,proto3" json:"parsed_timezone,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetTimeResponse) Reset() { + *x = GetTimeResponse{} + mi := &file_api_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTimeResponse) String() string { @@ -4952,8 +6482,8 @@ func (x *GetTimeResponse) String() string { func (*GetTimeResponse) ProtoMessage() {} func (x *GetTimeResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[40] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[48] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4965,7 +6495,7 @@ func (x *GetTimeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTimeResponse.ProtoReflect.Descriptor instead. func (*GetTimeResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{40} + return file_api_proto_rawDescGZIP(), []int{48} } func (x *GetTimeResponse) GetEpochSeconds() uint32 { @@ -4975,22 +6505,33 @@ func (x *GetTimeResponse) GetEpochSeconds() uint32 { return 0 } +func (x *GetTimeResponse) GetTimezone() string { + if x != nil { + return x.Timezone + } + return "" +} + +func (x *GetTimeResponse) GetParsedTimezone() *ParsedTimezone { + if x != nil { + return x.ParsedTimezone + } + return nil +} + type ListEntitiesServicesArgument struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Type ServiceArgType `protobuf:"varint,2,opt,name=type,proto3,enum=ServiceArgType" json:"type,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Type ServiceArgType `protobuf:"varint,2,opt,name=type,proto3,enum=ServiceArgType" json:"type,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListEntitiesServicesArgument) Reset() { *x = ListEntitiesServicesArgument{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListEntitiesServicesArgument) String() string { @@ -5000,8 +6541,8 @@ func (x *ListEntitiesServicesArgument) String() string { func (*ListEntitiesServicesArgument) ProtoMessage() {} func (x *ListEntitiesServicesArgument) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[41] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[49] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5013,7 +6554,7 @@ func (x *ListEntitiesServicesArgument) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEntitiesServicesArgument.ProtoReflect.Descriptor instead. func (*ListEntitiesServicesArgument) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{41} + return file_api_proto_rawDescGZIP(), []int{49} } func (x *ListEntitiesServicesArgument) GetName() string { @@ -5031,22 +6572,20 @@ func (x *ListEntitiesServicesArgument) GetType() ServiceArgType { } type ListEntitiesServicesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Args []*ListEntitiesServicesArgument `protobuf:"bytes,3,rep,name=args,proto3" json:"args,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Args []*ListEntitiesServicesArgument `protobuf:"bytes,3,rep,name=args,proto3" json:"args,omitempty"` + SupportsResponse SupportsResponseType `protobuf:"varint,4,opt,name=supports_response,json=supportsResponse,proto3,enum=SupportsResponseType" json:"supports_response,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListEntitiesServicesResponse) Reset() { *x = ListEntitiesServicesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListEntitiesServicesResponse) String() string { @@ -5056,8 +6595,8 @@ func (x *ListEntitiesServicesResponse) String() string { func (*ListEntitiesServicesResponse) ProtoMessage() {} func (x *ListEntitiesServicesResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[42] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[50] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5069,7 +6608,7 @@ func (x *ListEntitiesServicesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEntitiesServicesResponse.ProtoReflect.Descriptor instead. func (*ListEntitiesServicesResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{42} + return file_api_proto_rawDescGZIP(), []int{50} } func (x *ListEntitiesServicesResponse) GetName() string { @@ -5093,30 +6632,34 @@ func (x *ListEntitiesServicesResponse) GetArgs() []*ListEntitiesServicesArgument return nil } -type ExecuteServiceArgument struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesServicesResponse) GetSupportsResponse() SupportsResponseType { + if x != nil { + return x.SupportsResponse + } + return SupportsResponseType_SUPPORTS_RESPONSE_NONE +} - Bool_ bool `protobuf:"varint,1,opt,name=bool_,json=bool,proto3" json:"bool_,omitempty"` - LegacyInt int32 `protobuf:"varint,2,opt,name=legacy_int,json=legacyInt,proto3" json:"legacy_int,omitempty"` - Float_ float32 `protobuf:"fixed32,3,opt,name=float_,json=float,proto3" json:"float_,omitempty"` - String_ string `protobuf:"bytes,4,opt,name=string_,json=string,proto3" json:"string_,omitempty"` +type ExecuteServiceArgument struct { + state protoimpl.MessageState `protogen:"open.v1"` + Bool_ bool `protobuf:"varint,1,opt,name=bool_,json=bool,proto3" json:"bool_,omitempty"` + LegacyInt int32 `protobuf:"varint,2,opt,name=legacy_int,json=legacyInt,proto3" json:"legacy_int,omitempty"` + Float_ float32 `protobuf:"fixed32,3,opt,name=float_,json=float,proto3" json:"float_,omitempty"` + String_ string `protobuf:"bytes,4,opt,name=string_,json=string,proto3" json:"string_,omitempty"` // ESPHome 1.14 (api v1.3) make int a signed value - Int_ int32 `protobuf:"zigzag32,5,opt,name=int_,json=int,proto3" json:"int_,omitempty"` - BoolArray []bool `protobuf:"varint,6,rep,name=bool_array,json=boolArray,proto3" json:"bool_array,omitempty"` - IntArray []int32 `protobuf:"zigzag32,7,rep,name=int_array,json=intArray,proto3" json:"int_array,omitempty"` - FloatArray []float32 `protobuf:"fixed32,8,rep,name=float_array,json=floatArray,proto3" json:"float_array,omitempty"` - StringArray []string `protobuf:"bytes,9,rep,name=string_array,json=stringArray,proto3" json:"string_array,omitempty"` + Int_ int32 `protobuf:"zigzag32,5,opt,name=int_,json=int,proto3" json:"int_,omitempty"` + BoolArray []bool `protobuf:"varint,6,rep,name=bool_array,json=boolArray,proto3" json:"bool_array,omitempty"` + IntArray []int32 `protobuf:"zigzag32,7,rep,name=int_array,json=intArray,proto3" json:"int_array,omitempty"` + FloatArray []float32 `protobuf:"fixed32,8,rep,name=float_array,json=floatArray,proto3" json:"float_array,omitempty"` + StringArray []string `protobuf:"bytes,9,rep,name=string_array,json=stringArray,proto3" json:"string_array,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExecuteServiceArgument) Reset() { *x = ExecuteServiceArgument{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[43] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExecuteServiceArgument) String() string { @@ -5126,8 +6669,8 @@ func (x *ExecuteServiceArgument) String() string { func (*ExecuteServiceArgument) ProtoMessage() {} func (x *ExecuteServiceArgument) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[43] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[51] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5139,7 +6682,7 @@ func (x *ExecuteServiceArgument) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecuteServiceArgument.ProtoReflect.Descriptor instead. func (*ExecuteServiceArgument) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{43} + return file_api_proto_rawDescGZIP(), []int{51} } func (x *ExecuteServiceArgument) GetBool_() bool { @@ -5206,21 +6749,20 @@ func (x *ExecuteServiceArgument) GetStringArray() []string { } type ExecuteServiceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - Args []*ExecuteServiceArgument `protobuf:"bytes,2,rep,name=args,proto3" json:"args,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + Args []*ExecuteServiceArgument `protobuf:"bytes,2,rep,name=args,proto3" json:"args,omitempty"` + CallId uint32 `protobuf:"varint,3,opt,name=call_id,json=callId,proto3" json:"call_id,omitempty"` + ReturnResponse bool `protobuf:"varint,4,opt,name=return_response,json=returnResponse,proto3" json:"return_response,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExecuteServiceRequest) Reset() { *x = ExecuteServiceRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[44] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExecuteServiceRequest) String() string { @@ -5230,8 +6772,8 @@ func (x *ExecuteServiceRequest) String() string { func (*ExecuteServiceRequest) ProtoMessage() {} func (x *ExecuteServiceRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[44] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[52] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5243,7 +6785,7 @@ func (x *ExecuteServiceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecuteServiceRequest.ProtoReflect.Descriptor instead. func (*ExecuteServiceRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{44} + return file_api_proto_rawDescGZIP(), []int{52} } func (x *ExecuteServiceRequest) GetKey() uint32 { @@ -5260,39 +6802,47 @@ func (x *ExecuteServiceRequest) GetArgs() []*ExecuteServiceArgument { return nil } -// ==================== CAMERA ==================== -type ListEntitiesCameraResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - DisabledByDefault bool `protobuf:"varint,5,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - Icon string `protobuf:"bytes,6,opt,name=icon,proto3" json:"icon,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` +func (x *ExecuteServiceRequest) GetCallId() uint32 { + if x != nil { + return x.CallId + } + return 0 } -func (x *ListEntitiesCameraResponse) Reset() { - *x = ListEntitiesCameraResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[45] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ExecuteServiceRequest) GetReturnResponse() bool { + if x != nil { + return x.ReturnResponse } + return false } -func (x *ListEntitiesCameraResponse) String() string { +// Message sent by ESPHome to Home Assistant with service execution response data +type ExecuteServiceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + CallId uint32 `protobuf:"varint,1,opt,name=call_id,json=callId,proto3" json:"call_id,omitempty"` // Matches the call_id from ExecuteServiceRequest + Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"` // Whether the service execution succeeded + ErrorMessage string `protobuf:"bytes,3,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` // Error message if success = false + ResponseData []byte `protobuf:"bytes,4,opt,name=response_data,json=responseData,proto3" json:"response_data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExecuteServiceResponse) Reset() { + *x = ExecuteServiceResponse{} + mi := &file_api_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExecuteServiceResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListEntitiesCameraResponse) ProtoMessage() {} +func (*ExecuteServiceResponse) ProtoMessage() {} -func (x *ListEntitiesCameraResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[45] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ExecuteServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[53] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5302,77 +6852,147 @@ func (x *ListEntitiesCameraResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListEntitiesCameraResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesCameraResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{45} -} - -func (x *ListEntitiesCameraResponse) GetObjectId() string { - if x != nil { - return x.ObjectId - } - return "" +// Deprecated: Use ExecuteServiceResponse.ProtoReflect.Descriptor instead. +func (*ExecuteServiceResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{53} } -func (x *ListEntitiesCameraResponse) GetKey() uint32 { +func (x *ExecuteServiceResponse) GetCallId() uint32 { if x != nil { - return x.Key + return x.CallId } return 0 } -func (x *ListEntitiesCameraResponse) GetName() string { +func (x *ExecuteServiceResponse) GetSuccess() bool { if x != nil { - return x.Name + return x.Success } - return "" + return false } -func (x *ListEntitiesCameraResponse) GetUniqueId() string { +func (x *ExecuteServiceResponse) GetErrorMessage() string { if x != nil { - return x.UniqueId + return x.ErrorMessage } return "" } -func (x *ListEntitiesCameraResponse) GetDisabledByDefault() bool { +func (x *ExecuteServiceResponse) GetResponseData() []byte { if x != nil { - return x.DisabledByDefault + return x.ResponseData } - return false + return nil } -func (x *ListEntitiesCameraResponse) GetIcon() string { - if x != nil { - return x.Icon - } - return "" +// ==================== CAMERA ==================== +type ListEntitiesCameraResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + DisabledByDefault bool `protobuf:"varint,5,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + Icon string `protobuf:"bytes,6,opt,name=icon,proto3" json:"icon,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceId uint32 `protobuf:"varint,8,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ListEntitiesCameraResponse) GetEntityCategory() EntityCategory { +func (x *ListEntitiesCameraResponse) Reset() { + *x = ListEntitiesCameraResponse{} + mi := &file_api_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListEntitiesCameraResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListEntitiesCameraResponse) ProtoMessage() {} + +func (x *ListEntitiesCameraResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[54] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListEntitiesCameraResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesCameraResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{54} +} + +func (x *ListEntitiesCameraResponse) GetObjectId() string { + if x != nil { + return x.ObjectId + } + return "" +} + +func (x *ListEntitiesCameraResponse) GetKey() uint32 { + if x != nil { + return x.Key + } + return 0 +} + +func (x *ListEntitiesCameraResponse) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ListEntitiesCameraResponse) GetDisabledByDefault() bool { + if x != nil { + return x.DisabledByDefault + } + return false +} + +func (x *ListEntitiesCameraResponse) GetIcon() string { + if x != nil { + return x.Icon + } + return "" +} + +func (x *ListEntitiesCameraResponse) GetEntityCategory() EntityCategory { if x != nil { return x.EntityCategory } return EntityCategory_ENTITY_CATEGORY_NONE } +func (x *ListEntitiesCameraResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + type CameraImageResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` + Done bool `protobuf:"varint,3,opt,name=done,proto3" json:"done,omitempty"` + DeviceId uint32 `protobuf:"varint,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` - Done bool `protobuf:"varint,3,opt,name=done,proto3" json:"done,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CameraImageResponse) Reset() { *x = CameraImageResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[46] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CameraImageResponse) String() string { @@ -5382,8 +7002,8 @@ func (x *CameraImageResponse) String() string { func (*CameraImageResponse) ProtoMessage() {} func (x *CameraImageResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[46] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[55] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5395,7 +7015,7 @@ func (x *CameraImageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CameraImageResponse.ProtoReflect.Descriptor instead. func (*CameraImageResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{46} + return file_api_proto_rawDescGZIP(), []int{55} } func (x *CameraImageResponse) GetKey() uint32 { @@ -5419,22 +7039,26 @@ func (x *CameraImageResponse) GetDone() bool { return false } +func (x *CameraImageResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + type CameraImageRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Single bool `protobuf:"varint,1,opt,name=single,proto3" json:"single,omitempty"` + Stream bool `protobuf:"varint,2,opt,name=stream,proto3" json:"stream,omitempty"` unknownFields protoimpl.UnknownFields - - Single bool `protobuf:"varint,1,opt,name=single,proto3" json:"single,omitempty"` - Stream bool `protobuf:"varint,2,opt,name=stream,proto3" json:"stream,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CameraImageRequest) Reset() { *x = CameraImageRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[47] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CameraImageRequest) String() string { @@ -5444,8 +7068,8 @@ func (x *CameraImageRequest) String() string { func (*CameraImageRequest) ProtoMessage() {} func (x *CameraImageRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[47] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[56] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5457,7 +7081,7 @@ func (x *CameraImageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CameraImageRequest.ProtoReflect.Descriptor instead. func (*CameraImageRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{47} + return file_api_proto_rawDescGZIP(), []int{56} } func (x *CameraImageRequest) GetSingle() bool { @@ -5475,24 +7099,23 @@ func (x *CameraImageRequest) GetStream() bool { } type ListEntitiesClimateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - SupportsCurrentTemperature bool `protobuf:"varint,5,opt,name=supports_current_temperature,json=supportsCurrentTemperature,proto3" json:"supports_current_temperature,omitempty"` - SupportsTwoPointTargetTemperature bool `protobuf:"varint,6,opt,name=supports_two_point_target_temperature,json=supportsTwoPointTargetTemperature,proto3" json:"supports_two_point_target_temperature,omitempty"` - SupportedModes []ClimateMode `protobuf:"varint,7,rep,packed,name=supported_modes,json=supportedModes,proto3,enum=ClimateMode" json:"supported_modes,omitempty"` - VisualMinTemperature float32 `protobuf:"fixed32,8,opt,name=visual_min_temperature,json=visualMinTemperature,proto3" json:"visual_min_temperature,omitempty"` - VisualMaxTemperature float32 `protobuf:"fixed32,9,opt,name=visual_max_temperature,json=visualMaxTemperature,proto3" json:"visual_max_temperature,omitempty"` - VisualTargetTemperatureStep float32 `protobuf:"fixed32,10,opt,name=visual_target_temperature_step,json=visualTargetTemperatureStep,proto3" json:"visual_target_temperature_step,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + SupportsCurrentTemperature bool `protobuf:"varint,5,opt,name=supports_current_temperature,json=supportsCurrentTemperature,proto3" json:"supports_current_temperature,omitempty"` // Deprecated: use feature_flags + SupportsTwoPointTargetTemperature bool `protobuf:"varint,6,opt,name=supports_two_point_target_temperature,json=supportsTwoPointTargetTemperature,proto3" json:"supports_two_point_target_temperature,omitempty"` // Deprecated: use feature_flags + SupportedModes []ClimateMode `protobuf:"varint,7,rep,packed,name=supported_modes,json=supportedModes,proto3,enum=ClimateMode" json:"supported_modes,omitempty"` + VisualMinTemperature float32 `protobuf:"fixed32,8,opt,name=visual_min_temperature,json=visualMinTemperature,proto3" json:"visual_min_temperature,omitempty"` + VisualMaxTemperature float32 `protobuf:"fixed32,9,opt,name=visual_max_temperature,json=visualMaxTemperature,proto3" json:"visual_max_temperature,omitempty"` + VisualTargetTemperatureStep float32 `protobuf:"fixed32,10,opt,name=visual_target_temperature_step,json=visualTargetTemperatureStep,proto3" json:"visual_target_temperature_step,omitempty"` // for older peer versions - in new system this // is if CLIMATE_PRESET_AWAY exists is supported_presets + // Deprecated in API version 1.5 + // + // Deprecated: Marked as deprecated in api.proto. LegacySupportsAway bool `protobuf:"varint,11,opt,name=legacy_supports_away,json=legacySupportsAway,proto3" json:"legacy_supports_away,omitempty"` - SupportsAction bool `protobuf:"varint,12,opt,name=supports_action,json=supportsAction,proto3" json:"supports_action,omitempty"` + SupportsAction bool `protobuf:"varint,12,opt,name=supports_action,json=supportsAction,proto3" json:"supports_action,omitempty"` // Deprecated: use feature_flags SupportedFanModes []ClimateFanMode `protobuf:"varint,13,rep,packed,name=supported_fan_modes,json=supportedFanModes,proto3,enum=ClimateFanMode" json:"supported_fan_modes,omitempty"` SupportedSwingModes []ClimateSwingMode `protobuf:"varint,14,rep,packed,name=supported_swing_modes,json=supportedSwingModes,proto3,enum=ClimateSwingMode" json:"supported_swing_modes,omitempty"` SupportedCustomFanModes []string `protobuf:"bytes,15,rep,name=supported_custom_fan_modes,json=supportedCustomFanModes,proto3" json:"supported_custom_fan_modes,omitempty"` @@ -5502,19 +7125,22 @@ type ListEntitiesClimateResponse struct { Icon string `protobuf:"bytes,19,opt,name=icon,proto3" json:"icon,omitempty"` EntityCategory EntityCategory `protobuf:"varint,20,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` VisualCurrentTemperatureStep float32 `protobuf:"fixed32,21,opt,name=visual_current_temperature_step,json=visualCurrentTemperatureStep,proto3" json:"visual_current_temperature_step,omitempty"` - SupportsCurrentHumidity bool `protobuf:"varint,22,opt,name=supports_current_humidity,json=supportsCurrentHumidity,proto3" json:"supports_current_humidity,omitempty"` - SupportsTargetHumidity bool `protobuf:"varint,23,opt,name=supports_target_humidity,json=supportsTargetHumidity,proto3" json:"supports_target_humidity,omitempty"` + SupportsCurrentHumidity bool `protobuf:"varint,22,opt,name=supports_current_humidity,json=supportsCurrentHumidity,proto3" json:"supports_current_humidity,omitempty"` // Deprecated: use feature_flags + SupportsTargetHumidity bool `protobuf:"varint,23,opt,name=supports_target_humidity,json=supportsTargetHumidity,proto3" json:"supports_target_humidity,omitempty"` // Deprecated: use feature_flags VisualMinHumidity float32 `protobuf:"fixed32,24,opt,name=visual_min_humidity,json=visualMinHumidity,proto3" json:"visual_min_humidity,omitempty"` VisualMaxHumidity float32 `protobuf:"fixed32,25,opt,name=visual_max_humidity,json=visualMaxHumidity,proto3" json:"visual_max_humidity,omitempty"` + DeviceId uint32 `protobuf:"varint,26,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + FeatureFlags uint32 `protobuf:"varint,27,opt,name=feature_flags,json=featureFlags,proto3" json:"feature_flags,omitempty"` + TemperatureUnit TemperatureUnit `protobuf:"varint,28,opt,name=temperature_unit,json=temperatureUnit,proto3,enum=TemperatureUnit" json:"temperature_unit,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListEntitiesClimateResponse) Reset() { *x = ListEntitiesClimateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[48] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListEntitiesClimateResponse) String() string { @@ -5524,8 +7150,8 @@ func (x *ListEntitiesClimateResponse) String() string { func (*ListEntitiesClimateResponse) ProtoMessage() {} func (x *ListEntitiesClimateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[48] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[57] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5537,7 +7163,7 @@ func (x *ListEntitiesClimateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEntitiesClimateResponse.ProtoReflect.Descriptor instead. func (*ListEntitiesClimateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{48} + return file_api_proto_rawDescGZIP(), []int{57} } func (x *ListEntitiesClimateResponse) GetObjectId() string { @@ -5561,13 +7187,6 @@ func (x *ListEntitiesClimateResponse) GetName() string { return "" } -func (x *ListEntitiesClimateResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" -} - func (x *ListEntitiesClimateResponse) GetSupportsCurrentTemperature() bool { if x != nil { return x.SupportsCurrentTemperature @@ -5610,6 +7229,7 @@ func (x *ListEntitiesClimateResponse) GetVisualTargetTemperatureStep() float32 { return 0 } +// Deprecated: Marked as deprecated in api.proto. func (x *ListEntitiesClimateResponse) GetLegacySupportsAway() bool { if x != nil { return x.LegacySupportsAway @@ -5715,35 +7335,58 @@ func (x *ListEntitiesClimateResponse) GetVisualMaxHumidity() float32 { return 0 } -type ClimateStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesClimateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *ListEntitiesClimateResponse) GetFeatureFlags() uint32 { + if x != nil { + return x.FeatureFlags + } + return 0 +} + +func (x *ListEntitiesClimateResponse) GetTemperatureUnit() TemperatureUnit { + if x != nil { + return x.TemperatureUnit + } + return TemperatureUnit_TEMPERATURE_UNIT_CELSIUS +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - Mode ClimateMode `protobuf:"varint,2,opt,name=mode,proto3,enum=ClimateMode" json:"mode,omitempty"` - CurrentTemperature float32 `protobuf:"fixed32,3,opt,name=current_temperature,json=currentTemperature,proto3" json:"current_temperature,omitempty"` - TargetTemperature float32 `protobuf:"fixed32,4,opt,name=target_temperature,json=targetTemperature,proto3" json:"target_temperature,omitempty"` - TargetTemperatureLow float32 `protobuf:"fixed32,5,opt,name=target_temperature_low,json=targetTemperatureLow,proto3" json:"target_temperature_low,omitempty"` - TargetTemperatureHigh float32 `protobuf:"fixed32,6,opt,name=target_temperature_high,json=targetTemperatureHigh,proto3" json:"target_temperature_high,omitempty"` - UnusedLegacyAway bool `protobuf:"varint,7,opt,name=unused_legacy_away,json=unusedLegacyAway,proto3" json:"unused_legacy_away,omitempty"` - Action ClimateAction `protobuf:"varint,8,opt,name=action,proto3,enum=ClimateAction" json:"action,omitempty"` - FanMode ClimateFanMode `protobuf:"varint,9,opt,name=fan_mode,json=fanMode,proto3,enum=ClimateFanMode" json:"fan_mode,omitempty"` - SwingMode ClimateSwingMode `protobuf:"varint,10,opt,name=swing_mode,json=swingMode,proto3,enum=ClimateSwingMode" json:"swing_mode,omitempty"` - CustomFanMode string `protobuf:"bytes,11,opt,name=custom_fan_mode,json=customFanMode,proto3" json:"custom_fan_mode,omitempty"` - Preset ClimatePreset `protobuf:"varint,12,opt,name=preset,proto3,enum=ClimatePreset" json:"preset,omitempty"` - CustomPreset string `protobuf:"bytes,13,opt,name=custom_preset,json=customPreset,proto3" json:"custom_preset,omitempty"` - CurrentHumidity float32 `protobuf:"fixed32,14,opt,name=current_humidity,json=currentHumidity,proto3" json:"current_humidity,omitempty"` - TargetHumidity float32 `protobuf:"fixed32,15,opt,name=target_humidity,json=targetHumidity,proto3" json:"target_humidity,omitempty"` +type ClimateStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + Mode ClimateMode `protobuf:"varint,2,opt,name=mode,proto3,enum=ClimateMode" json:"mode,omitempty"` + CurrentTemperature float32 `protobuf:"fixed32,3,opt,name=current_temperature,json=currentTemperature,proto3" json:"current_temperature,omitempty"` + TargetTemperature float32 `protobuf:"fixed32,4,opt,name=target_temperature,json=targetTemperature,proto3" json:"target_temperature,omitempty"` + TargetTemperatureLow float32 `protobuf:"fixed32,5,opt,name=target_temperature_low,json=targetTemperatureLow,proto3" json:"target_temperature_low,omitempty"` + TargetTemperatureHigh float32 `protobuf:"fixed32,6,opt,name=target_temperature_high,json=targetTemperatureHigh,proto3" json:"target_temperature_high,omitempty"` + // For older peers, equal to preset == CLIMATE_PRESET_AWAY + // Deprecated in API version 1.5 + // + // Deprecated: Marked as deprecated in api.proto. + UnusedLegacyAway bool `protobuf:"varint,7,opt,name=unused_legacy_away,json=unusedLegacyAway,proto3" json:"unused_legacy_away,omitempty"` + Action ClimateAction `protobuf:"varint,8,opt,name=action,proto3,enum=ClimateAction" json:"action,omitempty"` + FanMode ClimateFanMode `protobuf:"varint,9,opt,name=fan_mode,json=fanMode,proto3,enum=ClimateFanMode" json:"fan_mode,omitempty"` + SwingMode ClimateSwingMode `protobuf:"varint,10,opt,name=swing_mode,json=swingMode,proto3,enum=ClimateSwingMode" json:"swing_mode,omitempty"` + CustomFanMode string `protobuf:"bytes,11,opt,name=custom_fan_mode,json=customFanMode,proto3" json:"custom_fan_mode,omitempty"` + Preset ClimatePreset `protobuf:"varint,12,opt,name=preset,proto3,enum=ClimatePreset" json:"preset,omitempty"` + CustomPreset string `protobuf:"bytes,13,opt,name=custom_preset,json=customPreset,proto3" json:"custom_preset,omitempty"` + CurrentHumidity float32 `protobuf:"fixed32,14,opt,name=current_humidity,json=currentHumidity,proto3" json:"current_humidity,omitempty"` + TargetHumidity float32 `protobuf:"fixed32,15,opt,name=target_humidity,json=targetHumidity,proto3" json:"target_humidity,omitempty"` + DeviceId uint32 `protobuf:"varint,16,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ClimateStateResponse) Reset() { *x = ClimateStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[49] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClimateStateResponse) String() string { @@ -5753,8 +7396,8 @@ func (x *ClimateStateResponse) String() string { func (*ClimateStateResponse) ProtoMessage() {} func (x *ClimateStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[49] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[58] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5766,7 +7409,7 @@ func (x *ClimateStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimateStateResponse.ProtoReflect.Descriptor instead. func (*ClimateStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{49} + return file_api_proto_rawDescGZIP(), []int{58} } func (x *ClimateStateResponse) GetKey() uint32 { @@ -5811,6 +7454,7 @@ func (x *ClimateStateResponse) GetTargetTemperatureHigh() float32 { return 0 } +// Deprecated: Marked as deprecated in api.proto. func (x *ClimateStateResponse) GetUnusedLegacyAway() bool { if x != nil { return x.UnusedLegacyAway @@ -5874,43 +7518,55 @@ func (x *ClimateStateResponse) GetTargetHumidity() float32 { return 0 } -type ClimateCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ClimateStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - HasMode bool `protobuf:"varint,2,opt,name=has_mode,json=hasMode,proto3" json:"has_mode,omitempty"` - Mode ClimateMode `protobuf:"varint,3,opt,name=mode,proto3,enum=ClimateMode" json:"mode,omitempty"` - HasTargetTemperature bool `protobuf:"varint,4,opt,name=has_target_temperature,json=hasTargetTemperature,proto3" json:"has_target_temperature,omitempty"` - TargetTemperature float32 `protobuf:"fixed32,5,opt,name=target_temperature,json=targetTemperature,proto3" json:"target_temperature,omitempty"` - HasTargetTemperatureLow bool `protobuf:"varint,6,opt,name=has_target_temperature_low,json=hasTargetTemperatureLow,proto3" json:"has_target_temperature_low,omitempty"` - TargetTemperatureLow float32 `protobuf:"fixed32,7,opt,name=target_temperature_low,json=targetTemperatureLow,proto3" json:"target_temperature_low,omitempty"` - HasTargetTemperatureHigh bool `protobuf:"varint,8,opt,name=has_target_temperature_high,json=hasTargetTemperatureHigh,proto3" json:"has_target_temperature_high,omitempty"` - TargetTemperatureHigh float32 `protobuf:"fixed32,9,opt,name=target_temperature_high,json=targetTemperatureHigh,proto3" json:"target_temperature_high,omitempty"` - UnusedHasLegacyAway bool `protobuf:"varint,10,opt,name=unused_has_legacy_away,json=unusedHasLegacyAway,proto3" json:"unused_has_legacy_away,omitempty"` - UnusedLegacyAway bool `protobuf:"varint,11,opt,name=unused_legacy_away,json=unusedLegacyAway,proto3" json:"unused_legacy_away,omitempty"` - HasFanMode bool `protobuf:"varint,12,opt,name=has_fan_mode,json=hasFanMode,proto3" json:"has_fan_mode,omitempty"` - FanMode ClimateFanMode `protobuf:"varint,13,opt,name=fan_mode,json=fanMode,proto3,enum=ClimateFanMode" json:"fan_mode,omitempty"` - HasSwingMode bool `protobuf:"varint,14,opt,name=has_swing_mode,json=hasSwingMode,proto3" json:"has_swing_mode,omitempty"` - SwingMode ClimateSwingMode `protobuf:"varint,15,opt,name=swing_mode,json=swingMode,proto3,enum=ClimateSwingMode" json:"swing_mode,omitempty"` - HasCustomFanMode bool `protobuf:"varint,16,opt,name=has_custom_fan_mode,json=hasCustomFanMode,proto3" json:"has_custom_fan_mode,omitempty"` - CustomFanMode string `protobuf:"bytes,17,opt,name=custom_fan_mode,json=customFanMode,proto3" json:"custom_fan_mode,omitempty"` - HasPreset bool `protobuf:"varint,18,opt,name=has_preset,json=hasPreset,proto3" json:"has_preset,omitempty"` - Preset ClimatePreset `protobuf:"varint,19,opt,name=preset,proto3,enum=ClimatePreset" json:"preset,omitempty"` - HasCustomPreset bool `protobuf:"varint,20,opt,name=has_custom_preset,json=hasCustomPreset,proto3" json:"has_custom_preset,omitempty"` - CustomPreset string `protobuf:"bytes,21,opt,name=custom_preset,json=customPreset,proto3" json:"custom_preset,omitempty"` - HasTargetHumidity bool `protobuf:"varint,22,opt,name=has_target_humidity,json=hasTargetHumidity,proto3" json:"has_target_humidity,omitempty"` - TargetHumidity float32 `protobuf:"fixed32,23,opt,name=target_humidity,json=targetHumidity,proto3" json:"target_humidity,omitempty"` +type ClimateCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + HasMode bool `protobuf:"varint,2,opt,name=has_mode,json=hasMode,proto3" json:"has_mode,omitempty"` + Mode ClimateMode `protobuf:"varint,3,opt,name=mode,proto3,enum=ClimateMode" json:"mode,omitempty"` + HasTargetTemperature bool `protobuf:"varint,4,opt,name=has_target_temperature,json=hasTargetTemperature,proto3" json:"has_target_temperature,omitempty"` + TargetTemperature float32 `protobuf:"fixed32,5,opt,name=target_temperature,json=targetTemperature,proto3" json:"target_temperature,omitempty"` + HasTargetTemperatureLow bool `protobuf:"varint,6,opt,name=has_target_temperature_low,json=hasTargetTemperatureLow,proto3" json:"has_target_temperature_low,omitempty"` + TargetTemperatureLow float32 `protobuf:"fixed32,7,opt,name=target_temperature_low,json=targetTemperatureLow,proto3" json:"target_temperature_low,omitempty"` + HasTargetTemperatureHigh bool `protobuf:"varint,8,opt,name=has_target_temperature_high,json=hasTargetTemperatureHigh,proto3" json:"has_target_temperature_high,omitempty"` + TargetTemperatureHigh float32 `protobuf:"fixed32,9,opt,name=target_temperature_high,json=targetTemperatureHigh,proto3" json:"target_temperature_high,omitempty"` + // legacy, for older peers, newer ones should use CLIMATE_PRESET_AWAY in preset + // Deprecated in API version 1.5 + // + // Deprecated: Marked as deprecated in api.proto. + UnusedHasLegacyAway bool `protobuf:"varint,10,opt,name=unused_has_legacy_away,json=unusedHasLegacyAway,proto3" json:"unused_has_legacy_away,omitempty"` + // Deprecated in API version 1.5 + // + // Deprecated: Marked as deprecated in api.proto. + UnusedLegacyAway bool `protobuf:"varint,11,opt,name=unused_legacy_away,json=unusedLegacyAway,proto3" json:"unused_legacy_away,omitempty"` + HasFanMode bool `protobuf:"varint,12,opt,name=has_fan_mode,json=hasFanMode,proto3" json:"has_fan_mode,omitempty"` + FanMode ClimateFanMode `protobuf:"varint,13,opt,name=fan_mode,json=fanMode,proto3,enum=ClimateFanMode" json:"fan_mode,omitempty"` + HasSwingMode bool `protobuf:"varint,14,opt,name=has_swing_mode,json=hasSwingMode,proto3" json:"has_swing_mode,omitempty"` + SwingMode ClimateSwingMode `protobuf:"varint,15,opt,name=swing_mode,json=swingMode,proto3,enum=ClimateSwingMode" json:"swing_mode,omitempty"` + HasCustomFanMode bool `protobuf:"varint,16,opt,name=has_custom_fan_mode,json=hasCustomFanMode,proto3" json:"has_custom_fan_mode,omitempty"` + CustomFanMode string `protobuf:"bytes,17,opt,name=custom_fan_mode,json=customFanMode,proto3" json:"custom_fan_mode,omitempty"` + HasPreset bool `protobuf:"varint,18,opt,name=has_preset,json=hasPreset,proto3" json:"has_preset,omitempty"` + Preset ClimatePreset `protobuf:"varint,19,opt,name=preset,proto3,enum=ClimatePreset" json:"preset,omitempty"` + HasCustomPreset bool `protobuf:"varint,20,opt,name=has_custom_preset,json=hasCustomPreset,proto3" json:"has_custom_preset,omitempty"` + CustomPreset string `protobuf:"bytes,21,opt,name=custom_preset,json=customPreset,proto3" json:"custom_preset,omitempty"` + HasTargetHumidity bool `protobuf:"varint,22,opt,name=has_target_humidity,json=hasTargetHumidity,proto3" json:"has_target_humidity,omitempty"` + TargetHumidity float32 `protobuf:"fixed32,23,opt,name=target_humidity,json=targetHumidity,proto3" json:"target_humidity,omitempty"` + DeviceId uint32 `protobuf:"varint,24,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ClimateCommandRequest) Reset() { *x = ClimateCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[50] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClimateCommandRequest) String() string { @@ -5920,8 +7576,8 @@ func (x *ClimateCommandRequest) String() string { func (*ClimateCommandRequest) ProtoMessage() {} func (x *ClimateCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[50] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_proto_msgTypes[59] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5933,7 +7589,7 @@ func (x *ClimateCommandRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimateCommandRequest.ProtoReflect.Descriptor instead. func (*ClimateCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{50} + return file_api_proto_rawDescGZIP(), []int{59} } func (x *ClimateCommandRequest) GetKey() uint32 { @@ -5999,6 +7655,7 @@ func (x *ClimateCommandRequest) GetTargetTemperatureHigh() float32 { return 0 } +// Deprecated: Marked as deprecated in api.proto. func (x *ClimateCommandRequest) GetUnusedHasLegacyAway() bool { if x != nil { return x.UnusedHasLegacyAway @@ -6006,6 +7663,7 @@ func (x *ClimateCommandRequest) GetUnusedHasLegacyAway() bool { return false } +// Deprecated: Marked as deprecated in api.proto. func (x *ClimateCommandRequest) GetUnusedLegacyAway() bool { if x != nil { return x.UnusedLegacyAway @@ -6097,44 +7755,49 @@ func (x *ClimateCommandRequest) GetTargetHumidity() float32 { return 0 } -type ListEntitiesNumberResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - MinValue float32 `protobuf:"fixed32,6,opt,name=min_value,json=minValue,proto3" json:"min_value,omitempty"` - MaxValue float32 `protobuf:"fixed32,7,opt,name=max_value,json=maxValue,proto3" json:"max_value,omitempty"` - Step float32 `protobuf:"fixed32,8,opt,name=step,proto3" json:"step,omitempty"` - DisabledByDefault bool `protobuf:"varint,9,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,10,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` - UnitOfMeasurement string `protobuf:"bytes,11,opt,name=unit_of_measurement,json=unitOfMeasurement,proto3" json:"unit_of_measurement,omitempty"` - Mode NumberMode `protobuf:"varint,12,opt,name=mode,proto3,enum=NumberMode" json:"mode,omitempty"` - DeviceClass string `protobuf:"bytes,13,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` +func (x *ClimateCommandRequest) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 } -func (x *ListEntitiesNumberResponse) Reset() { - *x = ListEntitiesNumberResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[51] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +type ListEntitiesWaterHeaterResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,4,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,5,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,6,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceId uint32 `protobuf:"varint,7,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + MinTemperature float32 `protobuf:"fixed32,8,opt,name=min_temperature,json=minTemperature,proto3" json:"min_temperature,omitempty"` + MaxTemperature float32 `protobuf:"fixed32,9,opt,name=max_temperature,json=maxTemperature,proto3" json:"max_temperature,omitempty"` + TargetTemperatureStep float32 `protobuf:"fixed32,10,opt,name=target_temperature_step,json=targetTemperatureStep,proto3" json:"target_temperature_step,omitempty"` + SupportedModes []WaterHeaterMode `protobuf:"varint,11,rep,packed,name=supported_modes,json=supportedModes,proto3,enum=WaterHeaterMode" json:"supported_modes,omitempty"` + // Bitmask of WaterHeaterFeature flags + SupportedFeatures uint32 `protobuf:"varint,12,opt,name=supported_features,json=supportedFeatures,proto3" json:"supported_features,omitempty"` + TemperatureUnit TemperatureUnit `protobuf:"varint,13,opt,name=temperature_unit,json=temperatureUnit,proto3,enum=TemperatureUnit" json:"temperature_unit,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListEntitiesWaterHeaterResponse) Reset() { + *x = ListEntitiesWaterHeaterResponse{} + mi := &file_api_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListEntitiesNumberResponse) String() string { +func (x *ListEntitiesWaterHeaterResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListEntitiesNumberResponse) ProtoMessage() {} +func (*ListEntitiesWaterHeaterResponse) ProtoMessage() {} -func (x *ListEntitiesNumberResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[51] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesWaterHeaterResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[60] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6144,132 +7807,133 @@ func (x *ListEntitiesNumberResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListEntitiesNumberResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesNumberResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{51} +// Deprecated: Use ListEntitiesWaterHeaterResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesWaterHeaterResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{60} } -func (x *ListEntitiesNumberResponse) GetObjectId() string { +func (x *ListEntitiesWaterHeaterResponse) GetObjectId() string { if x != nil { return x.ObjectId } return "" } -func (x *ListEntitiesNumberResponse) GetKey() uint32 { +func (x *ListEntitiesWaterHeaterResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *ListEntitiesNumberResponse) GetName() string { +func (x *ListEntitiesWaterHeaterResponse) GetName() string { if x != nil { return x.Name } return "" } -func (x *ListEntitiesNumberResponse) GetUniqueId() string { +func (x *ListEntitiesWaterHeaterResponse) GetIcon() string { if x != nil { - return x.UniqueId + return x.Icon } return "" } -func (x *ListEntitiesNumberResponse) GetIcon() string { +func (x *ListEntitiesWaterHeaterResponse) GetDisabledByDefault() bool { if x != nil { - return x.Icon + return x.DisabledByDefault } - return "" + return false } -func (x *ListEntitiesNumberResponse) GetMinValue() float32 { +func (x *ListEntitiesWaterHeaterResponse) GetEntityCategory() EntityCategory { if x != nil { - return x.MinValue + return x.EntityCategory } - return 0 + return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *ListEntitiesNumberResponse) GetMaxValue() float32 { +func (x *ListEntitiesWaterHeaterResponse) GetDeviceId() uint32 { if x != nil { - return x.MaxValue + return x.DeviceId } return 0 } -func (x *ListEntitiesNumberResponse) GetStep() float32 { +func (x *ListEntitiesWaterHeaterResponse) GetMinTemperature() float32 { if x != nil { - return x.Step + return x.MinTemperature } return 0 } -func (x *ListEntitiesNumberResponse) GetDisabledByDefault() bool { +func (x *ListEntitiesWaterHeaterResponse) GetMaxTemperature() float32 { if x != nil { - return x.DisabledByDefault + return x.MaxTemperature } - return false + return 0 } -func (x *ListEntitiesNumberResponse) GetEntityCategory() EntityCategory { +func (x *ListEntitiesWaterHeaterResponse) GetTargetTemperatureStep() float32 { if x != nil { - return x.EntityCategory + return x.TargetTemperatureStep } - return EntityCategory_ENTITY_CATEGORY_NONE + return 0 } -func (x *ListEntitiesNumberResponse) GetUnitOfMeasurement() string { +func (x *ListEntitiesWaterHeaterResponse) GetSupportedModes() []WaterHeaterMode { if x != nil { - return x.UnitOfMeasurement + return x.SupportedModes } - return "" + return nil } -func (x *ListEntitiesNumberResponse) GetMode() NumberMode { +func (x *ListEntitiesWaterHeaterResponse) GetSupportedFeatures() uint32 { if x != nil { - return x.Mode + return x.SupportedFeatures } - return NumberMode_NUMBER_MODE_AUTO + return 0 } -func (x *ListEntitiesNumberResponse) GetDeviceClass() string { +func (x *ListEntitiesWaterHeaterResponse) GetTemperatureUnit() TemperatureUnit { if x != nil { - return x.DeviceClass + return x.TemperatureUnit } - return "" + return TemperatureUnit_TEMPERATURE_UNIT_CELSIUS } -type NumberStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State float32 `protobuf:"fixed32,2,opt,name=state,proto3" json:"state,omitempty"` - // If the number does not have a valid state yet. - // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller - MissingState bool `protobuf:"varint,3,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` +type WaterHeaterStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + CurrentTemperature float32 `protobuf:"fixed32,2,opt,name=current_temperature,json=currentTemperature,proto3" json:"current_temperature,omitempty"` + TargetTemperature float32 `protobuf:"fixed32,3,opt,name=target_temperature,json=targetTemperature,proto3" json:"target_temperature,omitempty"` + Mode WaterHeaterMode `protobuf:"varint,4,opt,name=mode,proto3,enum=WaterHeaterMode" json:"mode,omitempty"` + DeviceId uint32 `protobuf:"varint,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + // Bitmask of current state flags (bit 0 = away, bit 1 = on) + State uint32 `protobuf:"varint,6,opt,name=state,proto3" json:"state,omitempty"` + TargetTemperatureLow float32 `protobuf:"fixed32,7,opt,name=target_temperature_low,json=targetTemperatureLow,proto3" json:"target_temperature_low,omitempty"` + TargetTemperatureHigh float32 `protobuf:"fixed32,8,opt,name=target_temperature_high,json=targetTemperatureHigh,proto3" json:"target_temperature_high,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *NumberStateResponse) Reset() { - *x = NumberStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[52] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *WaterHeaterStateResponse) Reset() { + *x = WaterHeaterStateResponse{} + mi := &file_api_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *NumberStateResponse) String() string { +func (x *WaterHeaterStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NumberStateResponse) ProtoMessage() {} +func (*WaterHeaterStateResponse) ProtoMessage() {} -func (x *NumberStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[52] - if protoimpl.UnsafeEnabled && x != nil { +func (x *WaterHeaterStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[61] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6279,59 +7943,99 @@ func (x *NumberStateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NumberStateResponse.ProtoReflect.Descriptor instead. -func (*NumberStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{52} +// Deprecated: Use WaterHeaterStateResponse.ProtoReflect.Descriptor instead. +func (*WaterHeaterStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{61} } -func (x *NumberStateResponse) GetKey() uint32 { +func (x *WaterHeaterStateResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *NumberStateResponse) GetState() float32 { +func (x *WaterHeaterStateResponse) GetCurrentTemperature() float32 { if x != nil { - return x.State + return x.CurrentTemperature } return 0 } -func (x *NumberStateResponse) GetMissingState() bool { +func (x *WaterHeaterStateResponse) GetTargetTemperature() float32 { if x != nil { - return x.MissingState + return x.TargetTemperature } - return false + return 0 } -type NumberCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State float32 `protobuf:"fixed32,2,opt,name=state,proto3" json:"state,omitempty"` +func (x *WaterHeaterStateResponse) GetMode() WaterHeaterMode { + if x != nil { + return x.Mode + } + return WaterHeaterMode_WATER_HEATER_MODE_OFF } -func (x *NumberCommandRequest) Reset() { - *x = NumberCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[53] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *WaterHeaterStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId } + return 0 } -func (x *NumberCommandRequest) String() string { +func (x *WaterHeaterStateResponse) GetState() uint32 { + if x != nil { + return x.State + } + return 0 +} + +func (x *WaterHeaterStateResponse) GetTargetTemperatureLow() float32 { + if x != nil { + return x.TargetTemperatureLow + } + return 0 +} + +func (x *WaterHeaterStateResponse) GetTargetTemperatureHigh() float32 { + if x != nil { + return x.TargetTemperatureHigh + } + return 0 +} + +type WaterHeaterCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + // Bitmask of which fields are set (see WaterHeaterCommandHasField) + HasFields uint32 `protobuf:"varint,2,opt,name=has_fields,json=hasFields,proto3" json:"has_fields,omitempty"` + Mode WaterHeaterMode `protobuf:"varint,3,opt,name=mode,proto3,enum=WaterHeaterMode" json:"mode,omitempty"` + TargetTemperature float32 `protobuf:"fixed32,4,opt,name=target_temperature,json=targetTemperature,proto3" json:"target_temperature,omitempty"` + DeviceId uint32 `protobuf:"varint,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + // State flags bitmask (bit 0 = away, bit 1 = on) + State uint32 `protobuf:"varint,6,opt,name=state,proto3" json:"state,omitempty"` + TargetTemperatureLow float32 `protobuf:"fixed32,7,opt,name=target_temperature_low,json=targetTemperatureLow,proto3" json:"target_temperature_low,omitempty"` + TargetTemperatureHigh float32 `protobuf:"fixed32,8,opt,name=target_temperature_high,json=targetTemperatureHigh,proto3" json:"target_temperature_high,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WaterHeaterCommandRequest) Reset() { + *x = WaterHeaterCommandRequest{} + mi := &file_api_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WaterHeaterCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NumberCommandRequest) ProtoMessage() {} +func (*WaterHeaterCommandRequest) ProtoMessage() {} -func (x *NumberCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[53] - if protoimpl.UnsafeEnabled && x != nil { +func (x *WaterHeaterCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[62] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6341,59 +8045,102 @@ func (x *NumberCommandRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NumberCommandRequest.ProtoReflect.Descriptor instead. -func (*NumberCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{53} +// Deprecated: Use WaterHeaterCommandRequest.ProtoReflect.Descriptor instead. +func (*WaterHeaterCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{62} } -func (x *NumberCommandRequest) GetKey() uint32 { +func (x *WaterHeaterCommandRequest) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *NumberCommandRequest) GetState() float32 { +func (x *WaterHeaterCommandRequest) GetHasFields() uint32 { if x != nil { - return x.State + return x.HasFields } return 0 } -// ==================== SELECT ==================== -type ListEntitiesSelectResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *WaterHeaterCommandRequest) GetMode() WaterHeaterMode { + if x != nil { + return x.Mode + } + return WaterHeaterMode_WATER_HEATER_MODE_OFF +} + +func (x *WaterHeaterCommandRequest) GetTargetTemperature() float32 { + if x != nil { + return x.TargetTemperature + } + return 0 +} - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - Options []string `protobuf:"bytes,6,rep,name=options,proto3" json:"options,omitempty"` - DisabledByDefault bool `protobuf:"varint,7,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,8,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` +func (x *WaterHeaterCommandRequest) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 } -func (x *ListEntitiesSelectResponse) Reset() { - *x = ListEntitiesSelectResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *WaterHeaterCommandRequest) GetState() uint32 { + if x != nil { + return x.State } + return 0 } -func (x *ListEntitiesSelectResponse) String() string { +func (x *WaterHeaterCommandRequest) GetTargetTemperatureLow() float32 { + if x != nil { + return x.TargetTemperatureLow + } + return 0 +} + +func (x *WaterHeaterCommandRequest) GetTargetTemperatureHigh() float32 { + if x != nil { + return x.TargetTemperatureHigh + } + return 0 +} + +type ListEntitiesNumberResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + MinValue float32 `protobuf:"fixed32,6,opt,name=min_value,json=minValue,proto3" json:"min_value,omitempty"` + MaxValue float32 `protobuf:"fixed32,7,opt,name=max_value,json=maxValue,proto3" json:"max_value,omitempty"` + Step float32 `protobuf:"fixed32,8,opt,name=step,proto3" json:"step,omitempty"` + DisabledByDefault bool `protobuf:"varint,9,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,10,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + UnitOfMeasurement string `protobuf:"bytes,11,opt,name=unit_of_measurement,json=unitOfMeasurement,proto3" json:"unit_of_measurement,omitempty"` + Mode NumberMode `protobuf:"varint,12,opt,name=mode,proto3,enum=NumberMode" json:"mode,omitempty"` + DeviceClass string `protobuf:"bytes,13,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + DeviceId uint32 `protobuf:"varint,14,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListEntitiesNumberResponse) Reset() { + *x = ListEntitiesNumberResponse{} + mi := &file_api_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListEntitiesNumberResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListEntitiesSelectResponse) ProtoMessage() {} +func (*ListEntitiesNumberResponse) ProtoMessage() {} -func (x *ListEntitiesSelectResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[54] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesNumberResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[63] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6403,97 +8150,130 @@ func (x *ListEntitiesSelectResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListEntitiesSelectResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesSelectResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{54} +// Deprecated: Use ListEntitiesNumberResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesNumberResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{63} } -func (x *ListEntitiesSelectResponse) GetObjectId() string { +func (x *ListEntitiesNumberResponse) GetObjectId() string { if x != nil { return x.ObjectId } return "" } -func (x *ListEntitiesSelectResponse) GetKey() uint32 { +func (x *ListEntitiesNumberResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *ListEntitiesSelectResponse) GetName() string { +func (x *ListEntitiesNumberResponse) GetName() string { if x != nil { return x.Name } return "" } -func (x *ListEntitiesSelectResponse) GetUniqueId() string { +func (x *ListEntitiesNumberResponse) GetIcon() string { if x != nil { - return x.UniqueId + return x.Icon } return "" } -func (x *ListEntitiesSelectResponse) GetIcon() string { +func (x *ListEntitiesNumberResponse) GetMinValue() float32 { if x != nil { - return x.Icon + return x.MinValue } - return "" + return 0 } -func (x *ListEntitiesSelectResponse) GetOptions() []string { +func (x *ListEntitiesNumberResponse) GetMaxValue() float32 { if x != nil { - return x.Options + return x.MaxValue } - return nil + return 0 } -func (x *ListEntitiesSelectResponse) GetDisabledByDefault() bool { +func (x *ListEntitiesNumberResponse) GetStep() float32 { + if x != nil { + return x.Step + } + return 0 +} + +func (x *ListEntitiesNumberResponse) GetDisabledByDefault() bool { if x != nil { return x.DisabledByDefault } return false } -func (x *ListEntitiesSelectResponse) GetEntityCategory() EntityCategory { +func (x *ListEntitiesNumberResponse) GetEntityCategory() EntityCategory { if x != nil { return x.EntityCategory } return EntityCategory_ENTITY_CATEGORY_NONE } -type SelectStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesNumberResponse) GetUnitOfMeasurement() string { + if x != nil { + return x.UnitOfMeasurement + } + return "" +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` - // If the select does not have a valid state yet. - // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller - MissingState bool `protobuf:"varint,3,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` +func (x *ListEntitiesNumberResponse) GetMode() NumberMode { + if x != nil { + return x.Mode + } + return NumberMode_NUMBER_MODE_AUTO } -func (x *SelectStateResponse) Reset() { - *x = SelectStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[55] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ListEntitiesNumberResponse) GetDeviceClass() string { + if x != nil { + return x.DeviceClass } + return "" } -func (x *SelectStateResponse) String() string { +func (x *ListEntitiesNumberResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + +type NumberStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State float32 `protobuf:"fixed32,2,opt,name=state,proto3" json:"state,omitempty"` + // If the number does not have a valid state yet. + // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller + MissingState bool `protobuf:"varint,3,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` + DeviceId uint32 `protobuf:"varint,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NumberStateResponse) Reset() { + *x = NumberStateResponse{} + mi := &file_api_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NumberStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SelectStateResponse) ProtoMessage() {} +func (*NumberStateResponse) ProtoMessage() {} -func (x *SelectStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[55] - if protoimpl.UnsafeEnabled && x != nil { +func (x *NumberStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[64] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6503,59 +8283,64 @@ func (x *SelectStateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SelectStateResponse.ProtoReflect.Descriptor instead. -func (*SelectStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{55} +// Deprecated: Use NumberStateResponse.ProtoReflect.Descriptor instead. +func (*NumberStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{64} } -func (x *SelectStateResponse) GetKey() uint32 { +func (x *NumberStateResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *SelectStateResponse) GetState() string { +func (x *NumberStateResponse) GetState() float32 { if x != nil { return x.State } - return "" + return 0 } -func (x *SelectStateResponse) GetMissingState() bool { +func (x *NumberStateResponse) GetMissingState() bool { if x != nil { return x.MissingState } return false } -type SelectCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *NumberStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` +type NumberCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State float32 `protobuf:"fixed32,2,opt,name=state,proto3" json:"state,omitempty"` + DeviceId uint32 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *SelectCommandRequest) Reset() { - *x = SelectCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[56] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *NumberCommandRequest) Reset() { + *x = NumberCommandRequest{} + mi := &file_api_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *SelectCommandRequest) String() string { +func (x *NumberCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SelectCommandRequest) ProtoMessage() {} +func (*NumberCommandRequest) ProtoMessage() {} -func (x *SelectCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[56] - if protoimpl.UnsafeEnabled && x != nil { +func (x *NumberCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[65] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6565,62 +8350,63 @@ func (x *SelectCommandRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SelectCommandRequest.ProtoReflect.Descriptor instead. -func (*SelectCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{56} +// Deprecated: Use NumberCommandRequest.ProtoReflect.Descriptor instead. +func (*NumberCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{65} } -func (x *SelectCommandRequest) GetKey() uint32 { +func (x *NumberCommandRequest) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *SelectCommandRequest) GetState() string { +func (x *NumberCommandRequest) GetState() float32 { if x != nil { return x.State } - return "" + return 0 } -type ListEntitiesLockResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *NumberCommandRequest) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` - AssumedState bool `protobuf:"varint,8,opt,name=assumed_state,json=assumedState,proto3" json:"assumed_state,omitempty"` - SupportsOpen bool `protobuf:"varint,9,opt,name=supports_open,json=supportsOpen,proto3" json:"supports_open,omitempty"` - RequiresCode bool `protobuf:"varint,10,opt,name=requires_code,json=requiresCode,proto3" json:"requires_code,omitempty"` - // Not yet implemented: - CodeFormat string `protobuf:"bytes,11,opt,name=code_format,json=codeFormat,proto3" json:"code_format,omitempty"` +// ==================== SELECT ==================== +type ListEntitiesSelectResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + Options []string `protobuf:"bytes,6,rep,name=options,proto3" json:"options,omitempty"` + DisabledByDefault bool `protobuf:"varint,7,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,8,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceId uint32 `protobuf:"varint,9,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ListEntitiesLockResponse) Reset() { - *x = ListEntitiesLockResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[57] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListEntitiesSelectResponse) Reset() { + *x = ListEntitiesSelectResponse{} + mi := &file_api_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListEntitiesLockResponse) String() string { +func (x *ListEntitiesSelectResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListEntitiesLockResponse) ProtoMessage() {} +func (*ListEntitiesSelectResponse) ProtoMessage() {} -func (x *ListEntitiesLockResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[57] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesSelectResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[66] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6630,115 +8416,95 @@ func (x *ListEntitiesLockResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListEntitiesLockResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesLockResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{57} +// Deprecated: Use ListEntitiesSelectResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesSelectResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{66} } -func (x *ListEntitiesLockResponse) GetObjectId() string { +func (x *ListEntitiesSelectResponse) GetObjectId() string { if x != nil { return x.ObjectId } return "" } -func (x *ListEntitiesLockResponse) GetKey() uint32 { +func (x *ListEntitiesSelectResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *ListEntitiesLockResponse) GetName() string { +func (x *ListEntitiesSelectResponse) GetName() string { if x != nil { return x.Name } return "" } -func (x *ListEntitiesLockResponse) GetUniqueId() string { +func (x *ListEntitiesSelectResponse) GetIcon() string { if x != nil { - return x.UniqueId + return x.Icon } return "" } -func (x *ListEntitiesLockResponse) GetIcon() string { +func (x *ListEntitiesSelectResponse) GetOptions() []string { if x != nil { - return x.Icon + return x.Options } - return "" + return nil } -func (x *ListEntitiesLockResponse) GetDisabledByDefault() bool { +func (x *ListEntitiesSelectResponse) GetDisabledByDefault() bool { if x != nil { return x.DisabledByDefault } return false } -func (x *ListEntitiesLockResponse) GetEntityCategory() EntityCategory { +func (x *ListEntitiesSelectResponse) GetEntityCategory() EntityCategory { if x != nil { return x.EntityCategory } return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *ListEntitiesLockResponse) GetAssumedState() bool { - if x != nil { - return x.AssumedState - } - return false -} - -func (x *ListEntitiesLockResponse) GetSupportsOpen() bool { - if x != nil { - return x.SupportsOpen - } - return false -} - -func (x *ListEntitiesLockResponse) GetRequiresCode() bool { - if x != nil { - return x.RequiresCode - } - return false -} - -func (x *ListEntitiesLockResponse) GetCodeFormat() string { +func (x *ListEntitiesSelectResponse) GetDeviceId() uint32 { if x != nil { - return x.CodeFormat + return x.DeviceId } - return "" + return 0 } -type LockStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type SelectStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + // If the select does not have a valid state yet. + // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller + MissingState bool `protobuf:"varint,3,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` + DeviceId uint32 `protobuf:"varint,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State LockState `protobuf:"varint,2,opt,name=state,proto3,enum=LockState" json:"state,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *LockStateResponse) Reset() { - *x = LockStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[58] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *SelectStateResponse) Reset() { + *x = SelectStateResponse{} + mi := &file_api_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *LockStateResponse) String() string { +func (x *SelectStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LockStateResponse) ProtoMessage() {} +func (*SelectStateResponse) ProtoMessage() {} -func (x *LockStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[58] - if protoimpl.UnsafeEnabled && x != nil { +func (x *SelectStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[67] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6748,55 +8514,64 @@ func (x *LockStateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LockStateResponse.ProtoReflect.Descriptor instead. -func (*LockStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{58} +// Deprecated: Use SelectStateResponse.ProtoReflect.Descriptor instead. +func (*SelectStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{67} } -func (x *LockStateResponse) GetKey() uint32 { +func (x *SelectStateResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *LockStateResponse) GetState() LockState { +func (x *SelectStateResponse) GetState() string { if x != nil { return x.State } - return LockState_LOCK_STATE_NONE + return "" } -type LockCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - Command LockCommand `protobuf:"varint,2,opt,name=command,proto3,enum=LockCommand" json:"command,omitempty"` - // Not yet implemented: - HasCode bool `protobuf:"varint,3,opt,name=has_code,json=hasCode,proto3" json:"has_code,omitempty"` - Code string `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"` +func (x *SelectStateResponse) GetMissingState() bool { + if x != nil { + return x.MissingState + } + return false } -func (x *LockCommandRequest) Reset() { - *x = LockCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[59] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *SelectStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId } + return 0 } -func (x *LockCommandRequest) String() string { +type SelectCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + DeviceId uint32 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SelectCommandRequest) Reset() { + *x = SelectCommandRequest{} + mi := &file_api_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SelectCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LockCommandRequest) ProtoMessage() {} +func (*SelectCommandRequest) ProtoMessage() {} -func (x *LockCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[59] - if protoimpl.UnsafeEnabled && x != nil { +func (x *SelectCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[68] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6806,73 +8581,65 @@ func (x *LockCommandRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LockCommandRequest.ProtoReflect.Descriptor instead. -func (*LockCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{59} +// Deprecated: Use SelectCommandRequest.ProtoReflect.Descriptor instead. +func (*SelectCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{68} } -func (x *LockCommandRequest) GetKey() uint32 { +func (x *SelectCommandRequest) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *LockCommandRequest) GetCommand() LockCommand { - if x != nil { - return x.Command - } - return LockCommand_LOCK_UNLOCK -} - -func (x *LockCommandRequest) GetHasCode() bool { +func (x *SelectCommandRequest) GetState() string { if x != nil { - return x.HasCode + return x.State } - return false + return "" } -func (x *LockCommandRequest) GetCode() string { +func (x *SelectCommandRequest) GetDeviceId() uint32 { if x != nil { - return x.Code + return x.DeviceId } - return "" -} - -// ==================== BUTTON ==================== -type ListEntitiesButtonResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` - DeviceClass string `protobuf:"bytes,8,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + return 0 } -func (x *ListEntitiesButtonResponse) Reset() { - *x = ListEntitiesButtonResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[60] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +// ==================== SIREN ==================== +type ListEntitiesSirenResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + Tones []string `protobuf:"bytes,7,rep,name=tones,proto3" json:"tones,omitempty"` + SupportsDuration bool `protobuf:"varint,8,opt,name=supports_duration,json=supportsDuration,proto3" json:"supports_duration,omitempty"` + SupportsVolume bool `protobuf:"varint,9,opt,name=supports_volume,json=supportsVolume,proto3" json:"supports_volume,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,10,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceId uint32 `protobuf:"varint,11,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListEntitiesSirenResponse) Reset() { + *x = ListEntitiesSirenResponse{} + mi := &file_api_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListEntitiesButtonResponse) String() string { +func (x *ListEntitiesSirenResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListEntitiesButtonResponse) ProtoMessage() {} +func (*ListEntitiesSirenResponse) ProtoMessage() {} -func (x *ListEntitiesButtonResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[60] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesSirenResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[69] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6882,93 +8649,106 @@ func (x *ListEntitiesButtonResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListEntitiesButtonResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesButtonResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{60} +// Deprecated: Use ListEntitiesSirenResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesSirenResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{69} } -func (x *ListEntitiesButtonResponse) GetObjectId() string { +func (x *ListEntitiesSirenResponse) GetObjectId() string { if x != nil { return x.ObjectId } return "" } -func (x *ListEntitiesButtonResponse) GetKey() uint32 { +func (x *ListEntitiesSirenResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *ListEntitiesButtonResponse) GetName() string { +func (x *ListEntitiesSirenResponse) GetName() string { if x != nil { return x.Name } return "" } -func (x *ListEntitiesButtonResponse) GetUniqueId() string { +func (x *ListEntitiesSirenResponse) GetIcon() string { if x != nil { - return x.UniqueId + return x.Icon } return "" } -func (x *ListEntitiesButtonResponse) GetIcon() string { +func (x *ListEntitiesSirenResponse) GetDisabledByDefault() bool { if x != nil { - return x.Icon + return x.DisabledByDefault } - return "" + return false } -func (x *ListEntitiesButtonResponse) GetDisabledByDefault() bool { +func (x *ListEntitiesSirenResponse) GetTones() []string { if x != nil { - return x.DisabledByDefault + return x.Tones + } + return nil +} + +func (x *ListEntitiesSirenResponse) GetSupportsDuration() bool { + if x != nil { + return x.SupportsDuration } return false } -func (x *ListEntitiesButtonResponse) GetEntityCategory() EntityCategory { +func (x *ListEntitiesSirenResponse) GetSupportsVolume() bool { + if x != nil { + return x.SupportsVolume + } + return false +} + +func (x *ListEntitiesSirenResponse) GetEntityCategory() EntityCategory { if x != nil { return x.EntityCategory } return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *ListEntitiesButtonResponse) GetDeviceClass() string { +func (x *ListEntitiesSirenResponse) GetDeviceId() uint32 { if x != nil { - return x.DeviceClass + return x.DeviceId } - return "" + return 0 } -type ButtonCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type SirenStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State bool `protobuf:"varint,2,opt,name=state,proto3" json:"state,omitempty"` + DeviceId uint32 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ButtonCommandRequest) Reset() { - *x = ButtonCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[61] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *SirenStateResponse) Reset() { + *x = SirenStateResponse{} + mi := &file_api_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ButtonCommandRequest) String() string { +func (x *SirenStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ButtonCommandRequest) ProtoMessage() {} +func (*SirenStateResponse) ProtoMessage() {} -func (x *ButtonCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[61] - if protoimpl.UnsafeEnabled && x != nil { +func (x *SirenStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[70] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6978,51 +8758,64 @@ func (x *ButtonCommandRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ButtonCommandRequest.ProtoReflect.Descriptor instead. -func (*ButtonCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{61} +// Deprecated: Use SirenStateResponse.ProtoReflect.Descriptor instead. +func (*SirenStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{70} } -func (x *ButtonCommandRequest) GetKey() uint32 { +func (x *SirenStateResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -type ListEntitiesMediaPlayerResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` - SupportsPause bool `protobuf:"varint,8,opt,name=supports_pause,json=supportsPause,proto3" json:"supports_pause,omitempty"` +func (x *SirenStateResponse) GetState() bool { + if x != nil { + return x.State + } + return false } -func (x *ListEntitiesMediaPlayerResponse) Reset() { - *x = ListEntitiesMediaPlayerResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[62] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *SirenStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId } + return 0 } -func (x *ListEntitiesMediaPlayerResponse) String() string { +type SirenCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + HasState bool `protobuf:"varint,2,opt,name=has_state,json=hasState,proto3" json:"has_state,omitempty"` + State bool `protobuf:"varint,3,opt,name=state,proto3" json:"state,omitempty"` + HasTone bool `protobuf:"varint,4,opt,name=has_tone,json=hasTone,proto3" json:"has_tone,omitempty"` + Tone string `protobuf:"bytes,5,opt,name=tone,proto3" json:"tone,omitempty"` + HasDuration bool `protobuf:"varint,6,opt,name=has_duration,json=hasDuration,proto3" json:"has_duration,omitempty"` + Duration uint32 `protobuf:"varint,7,opt,name=duration,proto3" json:"duration,omitempty"` + HasVolume bool `protobuf:"varint,8,opt,name=has_volume,json=hasVolume,proto3" json:"has_volume,omitempty"` + Volume float32 `protobuf:"fixed32,9,opt,name=volume,proto3" json:"volume,omitempty"` + DeviceId uint32 `protobuf:"varint,10,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SirenCommandRequest) Reset() { + *x = SirenCommandRequest{} + mi := &file_api_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SirenCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListEntitiesMediaPlayerResponse) ProtoMessage() {} +func (*SirenCommandRequest) ProtoMessage() {} -func (x *ListEntitiesMediaPlayerResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[62] - if protoimpl.UnsafeEnabled && x != nil { +func (x *SirenCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[71] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7032,172 +8825,115 @@ func (x *ListEntitiesMediaPlayerResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListEntitiesMediaPlayerResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesMediaPlayerResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{62} -} - -func (x *ListEntitiesMediaPlayerResponse) GetObjectId() string { - if x != nil { - return x.ObjectId - } - return "" +// Deprecated: Use SirenCommandRequest.ProtoReflect.Descriptor instead. +func (*SirenCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{71} } -func (x *ListEntitiesMediaPlayerResponse) GetKey() uint32 { +func (x *SirenCommandRequest) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *ListEntitiesMediaPlayerResponse) GetName() string { +func (x *SirenCommandRequest) GetHasState() bool { if x != nil { - return x.Name + return x.HasState } - return "" + return false } -func (x *ListEntitiesMediaPlayerResponse) GetUniqueId() string { +func (x *SirenCommandRequest) GetState() bool { if x != nil { - return x.UniqueId + return x.State } - return "" -} - -func (x *ListEntitiesMediaPlayerResponse) GetIcon() string { - if x != nil { - return x.Icon - } - return "" + return false } -func (x *ListEntitiesMediaPlayerResponse) GetDisabledByDefault() bool { +func (x *SirenCommandRequest) GetHasTone() bool { if x != nil { - return x.DisabledByDefault + return x.HasTone } return false } -func (x *ListEntitiesMediaPlayerResponse) GetEntityCategory() EntityCategory { +func (x *SirenCommandRequest) GetTone() string { if x != nil { - return x.EntityCategory + return x.Tone } - return EntityCategory_ENTITY_CATEGORY_NONE + return "" } -func (x *ListEntitiesMediaPlayerResponse) GetSupportsPause() bool { +func (x *SirenCommandRequest) GetHasDuration() bool { if x != nil { - return x.SupportsPause + return x.HasDuration } return false } -type MediaPlayerStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State MediaPlayerState `protobuf:"varint,2,opt,name=state,proto3,enum=MediaPlayerState" json:"state,omitempty"` - Volume float32 `protobuf:"fixed32,3,opt,name=volume,proto3" json:"volume,omitempty"` - Muted bool `protobuf:"varint,4,opt,name=muted,proto3" json:"muted,omitempty"` -} - -func (x *MediaPlayerStateResponse) Reset() { - *x = MediaPlayerStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[63] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MediaPlayerStateResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MediaPlayerStateResponse) ProtoMessage() {} - -func (x *MediaPlayerStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[63] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MediaPlayerStateResponse.ProtoReflect.Descriptor instead. -func (*MediaPlayerStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{63} -} - -func (x *MediaPlayerStateResponse) GetKey() uint32 { +func (x *SirenCommandRequest) GetDuration() uint32 { if x != nil { - return x.Key + return x.Duration } return 0 } -func (x *MediaPlayerStateResponse) GetState() MediaPlayerState { +func (x *SirenCommandRequest) GetHasVolume() bool { if x != nil { - return x.State + return x.HasVolume } - return MediaPlayerState_MEDIA_PLAYER_STATE_NONE + return false } -func (x *MediaPlayerStateResponse) GetVolume() float32 { +func (x *SirenCommandRequest) GetVolume() float32 { if x != nil { return x.Volume } return 0 } -func (x *MediaPlayerStateResponse) GetMuted() bool { +func (x *SirenCommandRequest) GetDeviceId() uint32 { if x != nil { - return x.Muted + return x.DeviceId } - return false + return 0 } -type MediaPlayerCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ListEntitiesLockResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + AssumedState bool `protobuf:"varint,8,opt,name=assumed_state,json=assumedState,proto3" json:"assumed_state,omitempty"` + SupportsOpen bool `protobuf:"varint,9,opt,name=supports_open,json=supportsOpen,proto3" json:"supports_open,omitempty"` + RequiresCode bool `protobuf:"varint,10,opt,name=requires_code,json=requiresCode,proto3" json:"requires_code,omitempty"` + // Not yet implemented: + CodeFormat string `protobuf:"bytes,11,opt,name=code_format,json=codeFormat,proto3" json:"code_format,omitempty"` + DeviceId uint32 `protobuf:"varint,12,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - HasCommand bool `protobuf:"varint,2,opt,name=has_command,json=hasCommand,proto3" json:"has_command,omitempty"` - Command MediaPlayerCommand `protobuf:"varint,3,opt,name=command,proto3,enum=MediaPlayerCommand" json:"command,omitempty"` - HasVolume bool `protobuf:"varint,4,opt,name=has_volume,json=hasVolume,proto3" json:"has_volume,omitempty"` - Volume float32 `protobuf:"fixed32,5,opt,name=volume,proto3" json:"volume,omitempty"` - HasMediaUrl bool `protobuf:"varint,6,opt,name=has_media_url,json=hasMediaUrl,proto3" json:"has_media_url,omitempty"` - MediaUrl string `protobuf:"bytes,7,opt,name=media_url,json=mediaUrl,proto3" json:"media_url,omitempty"` - HasAnnouncement bool `protobuf:"varint,8,opt,name=has_announcement,json=hasAnnouncement,proto3" json:"has_announcement,omitempty"` - Announcement bool `protobuf:"varint,9,opt,name=announcement,proto3" json:"announcement,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *MediaPlayerCommandRequest) Reset() { - *x = MediaPlayerCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[64] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListEntitiesLockResponse) Reset() { + *x = ListEntitiesLockResponse{} + mi := &file_api_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *MediaPlayerCommandRequest) String() string { +func (x *ListEntitiesLockResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MediaPlayerCommandRequest) ProtoMessage() {} +func (*ListEntitiesLockResponse) ProtoMessage() {} -func (x *MediaPlayerCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[64] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesLockResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[72] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7207,101 +8943,113 @@ func (x *MediaPlayerCommandRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MediaPlayerCommandRequest.ProtoReflect.Descriptor instead. -func (*MediaPlayerCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{64} +// Deprecated: Use ListEntitiesLockResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesLockResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{72} } -func (x *MediaPlayerCommandRequest) GetKey() uint32 { +func (x *ListEntitiesLockResponse) GetObjectId() string { + if x != nil { + return x.ObjectId + } + return "" +} + +func (x *ListEntitiesLockResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *MediaPlayerCommandRequest) GetHasCommand() bool { +func (x *ListEntitiesLockResponse) GetName() string { if x != nil { - return x.HasCommand + return x.Name } - return false + return "" } -func (x *MediaPlayerCommandRequest) GetCommand() MediaPlayerCommand { +func (x *ListEntitiesLockResponse) GetIcon() string { if x != nil { - return x.Command + return x.Icon } - return MediaPlayerCommand_MEDIA_PLAYER_COMMAND_PLAY + return "" } -func (x *MediaPlayerCommandRequest) GetHasVolume() bool { +func (x *ListEntitiesLockResponse) GetDisabledByDefault() bool { if x != nil { - return x.HasVolume + return x.DisabledByDefault } return false } -func (x *MediaPlayerCommandRequest) GetVolume() float32 { +func (x *ListEntitiesLockResponse) GetEntityCategory() EntityCategory { if x != nil { - return x.Volume + return x.EntityCategory } - return 0 + return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *MediaPlayerCommandRequest) GetHasMediaUrl() bool { +func (x *ListEntitiesLockResponse) GetAssumedState() bool { if x != nil { - return x.HasMediaUrl + return x.AssumedState } return false } -func (x *MediaPlayerCommandRequest) GetMediaUrl() string { +func (x *ListEntitiesLockResponse) GetSupportsOpen() bool { if x != nil { - return x.MediaUrl + return x.SupportsOpen } - return "" + return false } -func (x *MediaPlayerCommandRequest) GetHasAnnouncement() bool { +func (x *ListEntitiesLockResponse) GetRequiresCode() bool { if x != nil { - return x.HasAnnouncement + return x.RequiresCode } return false } -func (x *MediaPlayerCommandRequest) GetAnnouncement() bool { +func (x *ListEntitiesLockResponse) GetCodeFormat() string { if x != nil { - return x.Announcement + return x.CodeFormat } - return false + return "" } -// ==================== BLUETOOTH ==================== -type SubscribeBluetoothLEAdvertisementsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesLockResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Flags uint32 `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"` +type LockStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State LockState `protobuf:"varint,2,opt,name=state,proto3,enum=LockState" json:"state,omitempty"` + DeviceId uint32 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *SubscribeBluetoothLEAdvertisementsRequest) Reset() { - *x = SubscribeBluetoothLEAdvertisementsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[65] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *LockStateResponse) Reset() { + *x = LockStateResponse{} + mi := &file_api_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *SubscribeBluetoothLEAdvertisementsRequest) String() string { +func (x *LockStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SubscribeBluetoothLEAdvertisementsRequest) ProtoMessage() {} +func (*LockStateResponse) ProtoMessage() {} -func (x *SubscribeBluetoothLEAdvertisementsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[65] - if protoimpl.UnsafeEnabled && x != nil { +func (x *LockStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[73] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7311,47 +9059,60 @@ func (x *SubscribeBluetoothLEAdvertisementsRequest) ProtoReflect() protoreflect. return mi.MessageOf(x) } -// Deprecated: Use SubscribeBluetoothLEAdvertisementsRequest.ProtoReflect.Descriptor instead. -func (*SubscribeBluetoothLEAdvertisementsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{65} +// Deprecated: Use LockStateResponse.ProtoReflect.Descriptor instead. +func (*LockStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{73} } -func (x *SubscribeBluetoothLEAdvertisementsRequest) GetFlags() uint32 { +func (x *LockStateResponse) GetKey() uint32 { if x != nil { - return x.Flags + return x.Key } return 0 } -type BluetoothServiceData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Deprecated: Do not use. - LegacyData []uint32 `protobuf:"varint,2,rep,packed,name=legacy_data,json=legacyData,proto3" json:"legacy_data,omitempty"` - Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` // Changed in proto version 1.7 +func (x *LockStateResponse) GetState() LockState { + if x != nil { + return x.State + } + return LockState_LOCK_STATE_NONE } -func (x *BluetoothServiceData) Reset() { - *x = BluetoothServiceData{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[66] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *LockStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId } + return 0 } -func (x *BluetoothServiceData) String() string { +type LockCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + Command LockCommand `protobuf:"varint,2,opt,name=command,proto3,enum=LockCommand" json:"command,omitempty"` + // Not yet implemented: + HasCode bool `protobuf:"varint,3,opt,name=has_code,json=hasCode,proto3" json:"has_code,omitempty"` + Code string `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"` + DeviceId uint32 `protobuf:"varint,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LockCommandRequest) Reset() { + *x = LockCommandRequest{} + mi := &file_api_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LockCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothServiceData) ProtoMessage() {} +func (*LockCommandRequest) ProtoMessage() {} -func (x *BluetoothServiceData) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[66] - if protoimpl.UnsafeEnabled && x != nil { +func (x *LockCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[74] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7361,65 +9122,77 @@ func (x *BluetoothServiceData) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothServiceData.ProtoReflect.Descriptor instead. -func (*BluetoothServiceData) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{66} +// Deprecated: Use LockCommandRequest.ProtoReflect.Descriptor instead. +func (*LockCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{74} } -func (x *BluetoothServiceData) GetUuid() string { +func (x *LockCommandRequest) GetKey() uint32 { if x != nil { - return x.Uuid + return x.Key } - return "" + return 0 } -// Deprecated: Do not use. -func (x *BluetoothServiceData) GetLegacyData() []uint32 { +func (x *LockCommandRequest) GetCommand() LockCommand { if x != nil { - return x.LegacyData + return x.Command } - return nil + return LockCommand_LOCK_UNLOCK } -func (x *BluetoothServiceData) GetData() []byte { +func (x *LockCommandRequest) GetHasCode() bool { if x != nil { - return x.Data + return x.HasCode } - return nil -} - -type BluetoothLEAdvertisementResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Rssi int32 `protobuf:"zigzag32,3,opt,name=rssi,proto3" json:"rssi,omitempty"` - ServiceUuids []string `protobuf:"bytes,4,rep,name=service_uuids,json=serviceUuids,proto3" json:"service_uuids,omitempty"` - ServiceData []*BluetoothServiceData `protobuf:"bytes,5,rep,name=service_data,json=serviceData,proto3" json:"service_data,omitempty"` - ManufacturerData []*BluetoothServiceData `protobuf:"bytes,6,rep,name=manufacturer_data,json=manufacturerData,proto3" json:"manufacturer_data,omitempty"` - AddressType uint32 `protobuf:"varint,7,opt,name=address_type,json=addressType,proto3" json:"address_type,omitempty"` + return false } -func (x *BluetoothLEAdvertisementResponse) Reset() { - *x = BluetoothLEAdvertisementResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[67] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *LockCommandRequest) GetCode() string { + if x != nil { + return x.Code } + return "" } -func (x *BluetoothLEAdvertisementResponse) String() string { +func (x *LockCommandRequest) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + +// ==================== BUTTON ==================== +type ListEntitiesButtonResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceClass string `protobuf:"bytes,8,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + DeviceId uint32 `protobuf:"varint,9,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListEntitiesButtonResponse) Reset() { + *x = ListEntitiesButtonResponse{} + mi := &file_api_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListEntitiesButtonResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothLEAdvertisementResponse) ProtoMessage() {} +func (*ListEntitiesButtonResponse) ProtoMessage() {} -func (x *BluetoothLEAdvertisementResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[67] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesButtonResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[75] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7429,89 +9202,91 @@ func (x *BluetoothLEAdvertisementResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothLEAdvertisementResponse.ProtoReflect.Descriptor instead. -func (*BluetoothLEAdvertisementResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{67} +// Deprecated: Use ListEntitiesButtonResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesButtonResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{75} } -func (x *BluetoothLEAdvertisementResponse) GetAddress() uint64 { +func (x *ListEntitiesButtonResponse) GetObjectId() string { if x != nil { - return x.Address + return x.ObjectId + } + return "" +} + +func (x *ListEntitiesButtonResponse) GetKey() uint32 { + if x != nil { + return x.Key } return 0 } -func (x *BluetoothLEAdvertisementResponse) GetName() string { +func (x *ListEntitiesButtonResponse) GetName() string { if x != nil { return x.Name } return "" } -func (x *BluetoothLEAdvertisementResponse) GetRssi() int32 { +func (x *ListEntitiesButtonResponse) GetIcon() string { if x != nil { - return x.Rssi + return x.Icon } - return 0 + return "" } -func (x *BluetoothLEAdvertisementResponse) GetServiceUuids() []string { +func (x *ListEntitiesButtonResponse) GetDisabledByDefault() bool { if x != nil { - return x.ServiceUuids + return x.DisabledByDefault } - return nil + return false } -func (x *BluetoothLEAdvertisementResponse) GetServiceData() []*BluetoothServiceData { +func (x *ListEntitiesButtonResponse) GetEntityCategory() EntityCategory { if x != nil { - return x.ServiceData + return x.EntityCategory } - return nil + return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *BluetoothLEAdvertisementResponse) GetManufacturerData() []*BluetoothServiceData { +func (x *ListEntitiesButtonResponse) GetDeviceClass() string { if x != nil { - return x.ManufacturerData + return x.DeviceClass } - return nil + return "" } -func (x *BluetoothLEAdvertisementResponse) GetAddressType() uint32 { +func (x *ListEntitiesButtonResponse) GetDeviceId() uint32 { if x != nil { - return x.AddressType + return x.DeviceId } return 0 } -type BluetoothLERawAdvertisement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ButtonCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + DeviceId uint32 `protobuf:"varint,2,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Rssi int32 `protobuf:"zigzag32,2,opt,name=rssi,proto3" json:"rssi,omitempty"` - AddressType uint32 `protobuf:"varint,3,opt,name=address_type,json=addressType,proto3" json:"address_type,omitempty"` - Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *BluetoothLERawAdvertisement) Reset() { - *x = BluetoothLERawAdvertisement{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[68] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ButtonCommandRequest) Reset() { + *x = ButtonCommandRequest{} + mi := &file_api_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothLERawAdvertisement) String() string { +func (x *ButtonCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothLERawAdvertisement) ProtoMessage() {} +func (*ButtonCommandRequest) ProtoMessage() {} -func (x *BluetoothLERawAdvertisement) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[68] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ButtonCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[76] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7521,65 +9296,52 @@ func (x *BluetoothLERawAdvertisement) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothLERawAdvertisement.ProtoReflect.Descriptor instead. -func (*BluetoothLERawAdvertisement) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{68} -} - -func (x *BluetoothLERawAdvertisement) GetAddress() uint64 { - if x != nil { - return x.Address - } - return 0 +// Deprecated: Use ButtonCommandRequest.ProtoReflect.Descriptor instead. +func (*ButtonCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{76} } -func (x *BluetoothLERawAdvertisement) GetRssi() int32 { +func (x *ButtonCommandRequest) GetKey() uint32 { if x != nil { - return x.Rssi + return x.Key } return 0 } -func (x *BluetoothLERawAdvertisement) GetAddressType() uint32 { +func (x *ButtonCommandRequest) GetDeviceId() uint32 { if x != nil { - return x.AddressType + return x.DeviceId } return 0 } -func (x *BluetoothLERawAdvertisement) GetData() []byte { - if x != nil { - return x.Data - } - return nil -} - -type BluetoothLERawAdvertisementsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type MediaPlayerSupportedFormat struct { + state protoimpl.MessageState `protogen:"open.v1"` + Format string `protobuf:"bytes,1,opt,name=format,proto3" json:"format,omitempty"` + SampleRate uint32 `protobuf:"varint,2,opt,name=sample_rate,json=sampleRate,proto3" json:"sample_rate,omitempty"` + NumChannels uint32 `protobuf:"varint,3,opt,name=num_channels,json=numChannels,proto3" json:"num_channels,omitempty"` + Purpose MediaPlayerFormatPurpose `protobuf:"varint,4,opt,name=purpose,proto3,enum=MediaPlayerFormatPurpose" json:"purpose,omitempty"` + SampleBytes uint32 `protobuf:"varint,5,opt,name=sample_bytes,json=sampleBytes,proto3" json:"sample_bytes,omitempty"` unknownFields protoimpl.UnknownFields - - Advertisements []*BluetoothLERawAdvertisement `protobuf:"bytes,1,rep,name=advertisements,proto3" json:"advertisements,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *BluetoothLERawAdvertisementsResponse) Reset() { - *x = BluetoothLERawAdvertisementsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[69] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *MediaPlayerSupportedFormat) Reset() { + *x = MediaPlayerSupportedFormat{} + mi := &file_api_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothLERawAdvertisementsResponse) String() string { +func (x *MediaPlayerSupportedFormat) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothLERawAdvertisementsResponse) ProtoMessage() {} +func (*MediaPlayerSupportedFormat) ProtoMessage() {} -func (x *BluetoothLERawAdvertisementsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[69] - if protoimpl.UnsafeEnabled && x != nil { +func (x *MediaPlayerSupportedFormat) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[77] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7589,118 +9351,78 @@ func (x *BluetoothLERawAdvertisementsResponse) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use BluetoothLERawAdvertisementsResponse.ProtoReflect.Descriptor instead. -func (*BluetoothLERawAdvertisementsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{69} +// Deprecated: Use MediaPlayerSupportedFormat.ProtoReflect.Descriptor instead. +func (*MediaPlayerSupportedFormat) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{77} } -func (x *BluetoothLERawAdvertisementsResponse) GetAdvertisements() []*BluetoothLERawAdvertisement { +func (x *MediaPlayerSupportedFormat) GetFormat() string { if x != nil { - return x.Advertisements - } - return nil -} - -type BluetoothDeviceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - RequestType BluetoothDeviceRequestType `protobuf:"varint,2,opt,name=request_type,json=requestType,proto3,enum=BluetoothDeviceRequestType" json:"request_type,omitempty"` - HasAddressType bool `protobuf:"varint,3,opt,name=has_address_type,json=hasAddressType,proto3" json:"has_address_type,omitempty"` - AddressType uint32 `protobuf:"varint,4,opt,name=address_type,json=addressType,proto3" json:"address_type,omitempty"` -} - -func (x *BluetoothDeviceRequest) Reset() { - *x = BluetoothDeviceRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[70] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BluetoothDeviceRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BluetoothDeviceRequest) ProtoMessage() {} - -func (x *BluetoothDeviceRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[70] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms + return x.Format } - return mi.MessageOf(x) -} - -// Deprecated: Use BluetoothDeviceRequest.ProtoReflect.Descriptor instead. -func (*BluetoothDeviceRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{70} + return "" } -func (x *BluetoothDeviceRequest) GetAddress() uint64 { +func (x *MediaPlayerSupportedFormat) GetSampleRate() uint32 { if x != nil { - return x.Address + return x.SampleRate } return 0 } -func (x *BluetoothDeviceRequest) GetRequestType() BluetoothDeviceRequestType { +func (x *MediaPlayerSupportedFormat) GetNumChannels() uint32 { if x != nil { - return x.RequestType + return x.NumChannels } - return BluetoothDeviceRequestType_BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT + return 0 } -func (x *BluetoothDeviceRequest) GetHasAddressType() bool { +func (x *MediaPlayerSupportedFormat) GetPurpose() MediaPlayerFormatPurpose { if x != nil { - return x.HasAddressType + return x.Purpose } - return false + return MediaPlayerFormatPurpose_MEDIA_PLAYER_FORMAT_PURPOSE_DEFAULT } -func (x *BluetoothDeviceRequest) GetAddressType() uint32 { +func (x *MediaPlayerSupportedFormat) GetSampleBytes() uint32 { if x != nil { - return x.AddressType + return x.SampleBytes } return 0 } -type BluetoothDeviceConnectionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Connected bool `protobuf:"varint,2,opt,name=connected,proto3" json:"connected,omitempty"` - Mtu uint32 `protobuf:"varint,3,opt,name=mtu,proto3" json:"mtu,omitempty"` - Error int32 `protobuf:"varint,4,opt,name=error,proto3" json:"error,omitempty"` +type ListEntitiesMediaPlayerResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + SupportsPause bool `protobuf:"varint,8,opt,name=supports_pause,json=supportsPause,proto3" json:"supports_pause,omitempty"` + SupportedFormats []*MediaPlayerSupportedFormat `protobuf:"bytes,9,rep,name=supported_formats,json=supportedFormats,proto3" json:"supported_formats,omitempty"` + DeviceId uint32 `protobuf:"varint,10,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + FeatureFlags uint32 `protobuf:"varint,11,opt,name=feature_flags,json=featureFlags,proto3" json:"feature_flags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BluetoothDeviceConnectionResponse) Reset() { - *x = BluetoothDeviceConnectionResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[71] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListEntitiesMediaPlayerResponse) Reset() { + *x = ListEntitiesMediaPlayerResponse{} + mi := &file_api_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothDeviceConnectionResponse) String() string { +func (x *ListEntitiesMediaPlayerResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothDeviceConnectionResponse) ProtoMessage() {} +func (*ListEntitiesMediaPlayerResponse) ProtoMessage() {} -func (x *BluetoothDeviceConnectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[71] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesMediaPlayerResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[78] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7710,65 +9432,2445 @@ func (x *BluetoothDeviceConnectionResponse) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use BluetoothDeviceConnectionResponse.ProtoReflect.Descriptor instead. -func (*BluetoothDeviceConnectionResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{71} +// Deprecated: Use ListEntitiesMediaPlayerResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesMediaPlayerResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{78} } -func (x *BluetoothDeviceConnectionResponse) GetAddress() uint64 { +func (x *ListEntitiesMediaPlayerResponse) GetObjectId() string { if x != nil { - return x.Address + return x.ObjectId } - return 0 + return "" } -func (x *BluetoothDeviceConnectionResponse) GetConnected() bool { +func (x *ListEntitiesMediaPlayerResponse) GetKey() uint32 { if x != nil { - return x.Connected + return x.Key } - return false + return 0 } -func (x *BluetoothDeviceConnectionResponse) GetMtu() uint32 { +func (x *ListEntitiesMediaPlayerResponse) GetName() string { if x != nil { - return x.Mtu + return x.Name } - return 0 + return "" } -func (x *BluetoothDeviceConnectionResponse) GetError() int32 { +func (x *ListEntitiesMediaPlayerResponse) GetIcon() string { if x != nil { - return x.Error + return x.Icon } - return 0 + return "" } -type BluetoothGATTGetServicesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` +func (x *ListEntitiesMediaPlayerResponse) GetDisabledByDefault() bool { + if x != nil { + return x.DisabledByDefault + } + return false } -func (x *BluetoothGATTGetServicesRequest) Reset() { - *x = BluetoothGATTGetServicesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[72] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ListEntitiesMediaPlayerResponse) GetEntityCategory() EntityCategory { + if x != nil { + return x.EntityCategory } + return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *BluetoothGATTGetServicesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} +func (x *ListEntitiesMediaPlayerResponse) GetSupportsPause() bool { + if x != nil { + return x.SupportsPause + } + return false +} + +func (x *ListEntitiesMediaPlayerResponse) GetSupportedFormats() []*MediaPlayerSupportedFormat { + if x != nil { + return x.SupportedFormats + } + return nil +} + +func (x *ListEntitiesMediaPlayerResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *ListEntitiesMediaPlayerResponse) GetFeatureFlags() uint32 { + if x != nil { + return x.FeatureFlags + } + return 0 +} + +type MediaPlayerStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State MediaPlayerState `protobuf:"varint,2,opt,name=state,proto3,enum=MediaPlayerState" json:"state,omitempty"` + Volume float32 `protobuf:"fixed32,3,opt,name=volume,proto3" json:"volume,omitempty"` + Muted bool `protobuf:"varint,4,opt,name=muted,proto3" json:"muted,omitempty"` + DeviceId uint32 `protobuf:"varint,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MediaPlayerStateResponse) Reset() { + *x = MediaPlayerStateResponse{} + mi := &file_api_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MediaPlayerStateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MediaPlayerStateResponse) ProtoMessage() {} + +func (x *MediaPlayerStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[79] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MediaPlayerStateResponse.ProtoReflect.Descriptor instead. +func (*MediaPlayerStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{79} +} + +func (x *MediaPlayerStateResponse) GetKey() uint32 { + if x != nil { + return x.Key + } + return 0 +} + +func (x *MediaPlayerStateResponse) GetState() MediaPlayerState { + if x != nil { + return x.State + } + return MediaPlayerState_MEDIA_PLAYER_STATE_NONE +} + +func (x *MediaPlayerStateResponse) GetVolume() float32 { + if x != nil { + return x.Volume + } + return 0 +} + +func (x *MediaPlayerStateResponse) GetMuted() bool { + if x != nil { + return x.Muted + } + return false +} + +func (x *MediaPlayerStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + +type MediaPlayerCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + HasCommand bool `protobuf:"varint,2,opt,name=has_command,json=hasCommand,proto3" json:"has_command,omitempty"` + Command MediaPlayerCommand `protobuf:"varint,3,opt,name=command,proto3,enum=MediaPlayerCommand" json:"command,omitempty"` + HasVolume bool `protobuf:"varint,4,opt,name=has_volume,json=hasVolume,proto3" json:"has_volume,omitempty"` + Volume float32 `protobuf:"fixed32,5,opt,name=volume,proto3" json:"volume,omitempty"` + HasMediaUrl bool `protobuf:"varint,6,opt,name=has_media_url,json=hasMediaUrl,proto3" json:"has_media_url,omitempty"` + MediaUrl string `protobuf:"bytes,7,opt,name=media_url,json=mediaUrl,proto3" json:"media_url,omitempty"` + HasAnnouncement bool `protobuf:"varint,8,opt,name=has_announcement,json=hasAnnouncement,proto3" json:"has_announcement,omitempty"` + Announcement bool `protobuf:"varint,9,opt,name=announcement,proto3" json:"announcement,omitempty"` + DeviceId uint32 `protobuf:"varint,10,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MediaPlayerCommandRequest) Reset() { + *x = MediaPlayerCommandRequest{} + mi := &file_api_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MediaPlayerCommandRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MediaPlayerCommandRequest) ProtoMessage() {} + +func (x *MediaPlayerCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[80] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MediaPlayerCommandRequest.ProtoReflect.Descriptor instead. +func (*MediaPlayerCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{80} +} + +func (x *MediaPlayerCommandRequest) GetKey() uint32 { + if x != nil { + return x.Key + } + return 0 +} + +func (x *MediaPlayerCommandRequest) GetHasCommand() bool { + if x != nil { + return x.HasCommand + } + return false +} + +func (x *MediaPlayerCommandRequest) GetCommand() MediaPlayerCommand { + if x != nil { + return x.Command + } + return MediaPlayerCommand_MEDIA_PLAYER_COMMAND_PLAY +} + +func (x *MediaPlayerCommandRequest) GetHasVolume() bool { + if x != nil { + return x.HasVolume + } + return false +} + +func (x *MediaPlayerCommandRequest) GetVolume() float32 { + if x != nil { + return x.Volume + } + return 0 +} + +func (x *MediaPlayerCommandRequest) GetHasMediaUrl() bool { + if x != nil { + return x.HasMediaUrl + } + return false +} + +func (x *MediaPlayerCommandRequest) GetMediaUrl() string { + if x != nil { + return x.MediaUrl + } + return "" +} + +func (x *MediaPlayerCommandRequest) GetHasAnnouncement() bool { + if x != nil { + return x.HasAnnouncement + } + return false +} + +func (x *MediaPlayerCommandRequest) GetAnnouncement() bool { + if x != nil { + return x.Announcement + } + return false +} + +func (x *MediaPlayerCommandRequest) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} + +// ==================== BLUETOOTH ==================== +type SubscribeBluetoothLEAdvertisementsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Flags uint32 `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscribeBluetoothLEAdvertisementsRequest) Reset() { + *x = SubscribeBluetoothLEAdvertisementsRequest{} + mi := &file_api_proto_msgTypes[81] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscribeBluetoothLEAdvertisementsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeBluetoothLEAdvertisementsRequest) ProtoMessage() {} + +func (x *SubscribeBluetoothLEAdvertisementsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[81] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeBluetoothLEAdvertisementsRequest.ProtoReflect.Descriptor instead. +func (*SubscribeBluetoothLEAdvertisementsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{81} +} + +func (x *SubscribeBluetoothLEAdvertisementsRequest) GetFlags() uint32 { + if x != nil { + return x.Flags + } + return 0 +} + +// Deprecated - only used by deprecated BluetoothLEAdvertisementResponse +// +// Deprecated: Marked as deprecated in api.proto. +type BluetoothServiceData struct { + state protoimpl.MessageState `protogen:"open.v1"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Deprecated in API version 1.7 + // + // Deprecated: Marked as deprecated in api.proto. + LegacyData []uint32 `protobuf:"varint,2,rep,packed,name=legacy_data,json=legacyData,proto3" json:"legacy_data,omitempty"` // Removed in api version 1.7 + Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` // Added in api version 1.7 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothServiceData) Reset() { + *x = BluetoothServiceData{} + mi := &file_api_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothServiceData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothServiceData) ProtoMessage() {} + +func (x *BluetoothServiceData) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[82] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothServiceData.ProtoReflect.Descriptor instead. +func (*BluetoothServiceData) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{82} +} + +func (x *BluetoothServiceData) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +// Deprecated: Marked as deprecated in api.proto. +func (x *BluetoothServiceData) GetLegacyData() []uint32 { + if x != nil { + return x.LegacyData + } + return nil +} + +func (x *BluetoothServiceData) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +// Removed in ESPHome 2025.8.0 - use BluetoothLERawAdvertisementsResponse instead +// +// Deprecated: Marked as deprecated in api.proto. +type BluetoothLEAdvertisementResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Name []byte `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Rssi int32 `protobuf:"zigzag32,3,opt,name=rssi,proto3" json:"rssi,omitempty"` + ServiceUuids []string `protobuf:"bytes,4,rep,name=service_uuids,json=serviceUuids,proto3" json:"service_uuids,omitempty"` + ServiceData []*BluetoothServiceData `protobuf:"bytes,5,rep,name=service_data,json=serviceData,proto3" json:"service_data,omitempty"` + ManufacturerData []*BluetoothServiceData `protobuf:"bytes,6,rep,name=manufacturer_data,json=manufacturerData,proto3" json:"manufacturer_data,omitempty"` + AddressType uint32 `protobuf:"varint,7,opt,name=address_type,json=addressType,proto3" json:"address_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothLEAdvertisementResponse) Reset() { + *x = BluetoothLEAdvertisementResponse{} + mi := &file_api_proto_msgTypes[83] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothLEAdvertisementResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothLEAdvertisementResponse) ProtoMessage() {} + +func (x *BluetoothLEAdvertisementResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[83] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothLEAdvertisementResponse.ProtoReflect.Descriptor instead. +func (*BluetoothLEAdvertisementResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{83} +} + +func (x *BluetoothLEAdvertisementResponse) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothLEAdvertisementResponse) GetName() []byte { + if x != nil { + return x.Name + } + return nil +} + +func (x *BluetoothLEAdvertisementResponse) GetRssi() int32 { + if x != nil { + return x.Rssi + } + return 0 +} + +func (x *BluetoothLEAdvertisementResponse) GetServiceUuids() []string { + if x != nil { + return x.ServiceUuids + } + return nil +} + +func (x *BluetoothLEAdvertisementResponse) GetServiceData() []*BluetoothServiceData { + if x != nil { + return x.ServiceData + } + return nil +} + +func (x *BluetoothLEAdvertisementResponse) GetManufacturerData() []*BluetoothServiceData { + if x != nil { + return x.ManufacturerData + } + return nil +} + +func (x *BluetoothLEAdvertisementResponse) GetAddressType() uint32 { + if x != nil { + return x.AddressType + } + return 0 +} + +type BluetoothLERawAdvertisement struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Rssi int32 `protobuf:"zigzag32,2,opt,name=rssi,proto3" json:"rssi,omitempty"` + AddressType uint32 `protobuf:"varint,3,opt,name=address_type,json=addressType,proto3" json:"address_type,omitempty"` + Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothLERawAdvertisement) Reset() { + *x = BluetoothLERawAdvertisement{} + mi := &file_api_proto_msgTypes[84] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothLERawAdvertisement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothLERawAdvertisement) ProtoMessage() {} + +func (x *BluetoothLERawAdvertisement) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[84] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothLERawAdvertisement.ProtoReflect.Descriptor instead. +func (*BluetoothLERawAdvertisement) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{84} +} + +func (x *BluetoothLERawAdvertisement) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothLERawAdvertisement) GetRssi() int32 { + if x != nil { + return x.Rssi + } + return 0 +} + +func (x *BluetoothLERawAdvertisement) GetAddressType() uint32 { + if x != nil { + return x.AddressType + } + return 0 +} + +func (x *BluetoothLERawAdvertisement) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +type BluetoothLERawAdvertisementsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Advertisements []*BluetoothLERawAdvertisement `protobuf:"bytes,1,rep,name=advertisements,proto3" json:"advertisements,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothLERawAdvertisementsResponse) Reset() { + *x = BluetoothLERawAdvertisementsResponse{} + mi := &file_api_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothLERawAdvertisementsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothLERawAdvertisementsResponse) ProtoMessage() {} + +func (x *BluetoothLERawAdvertisementsResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[85] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothLERawAdvertisementsResponse.ProtoReflect.Descriptor instead. +func (*BluetoothLERawAdvertisementsResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{85} +} + +func (x *BluetoothLERawAdvertisementsResponse) GetAdvertisements() []*BluetoothLERawAdvertisement { + if x != nil { + return x.Advertisements + } + return nil +} + +type BluetoothDeviceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + RequestType BluetoothDeviceRequestType `protobuf:"varint,2,opt,name=request_type,json=requestType,proto3,enum=BluetoothDeviceRequestType" json:"request_type,omitempty"` + HasAddressType bool `protobuf:"varint,3,opt,name=has_address_type,json=hasAddressType,proto3" json:"has_address_type,omitempty"` // Deprecated, should be removed in 2027.8 - https://github.com/esphome/esphome/pull/10318 + AddressType uint32 `protobuf:"varint,4,opt,name=address_type,json=addressType,proto3" json:"address_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothDeviceRequest) Reset() { + *x = BluetoothDeviceRequest{} + mi := &file_api_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothDeviceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothDeviceRequest) ProtoMessage() {} + +func (x *BluetoothDeviceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[86] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothDeviceRequest.ProtoReflect.Descriptor instead. +func (*BluetoothDeviceRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{86} +} + +func (x *BluetoothDeviceRequest) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothDeviceRequest) GetRequestType() BluetoothDeviceRequestType { + if x != nil { + return x.RequestType + } + return BluetoothDeviceRequestType_BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT +} + +func (x *BluetoothDeviceRequest) GetHasAddressType() bool { + if x != nil { + return x.HasAddressType + } + return false +} + +func (x *BluetoothDeviceRequest) GetAddressType() uint32 { + if x != nil { + return x.AddressType + } + return 0 +} + +type BluetoothDeviceConnectionResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Connected bool `protobuf:"varint,2,opt,name=connected,proto3" json:"connected,omitempty"` + Mtu uint32 `protobuf:"varint,3,opt,name=mtu,proto3" json:"mtu,omitempty"` + Error int32 `protobuf:"varint,4,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothDeviceConnectionResponse) Reset() { + *x = BluetoothDeviceConnectionResponse{} + mi := &file_api_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothDeviceConnectionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothDeviceConnectionResponse) ProtoMessage() {} + +func (x *BluetoothDeviceConnectionResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[87] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothDeviceConnectionResponse.ProtoReflect.Descriptor instead. +func (*BluetoothDeviceConnectionResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{87} +} + +func (x *BluetoothDeviceConnectionResponse) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothDeviceConnectionResponse) GetConnected() bool { + if x != nil { + return x.Connected + } + return false +} + +func (x *BluetoothDeviceConnectionResponse) GetMtu() uint32 { + if x != nil { + return x.Mtu + } + return 0 +} + +func (x *BluetoothDeviceConnectionResponse) GetError() int32 { + if x != nil { + return x.Error + } + return 0 +} + +type BluetoothGATTGetServicesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTGetServicesRequest) Reset() { + *x = BluetoothGATTGetServicesRequest{} + mi := &file_api_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTGetServicesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTGetServicesRequest) ProtoMessage() {} + +func (x *BluetoothGATTGetServicesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[88] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTGetServicesRequest.ProtoReflect.Descriptor instead. +func (*BluetoothGATTGetServicesRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{88} +} + +func (x *BluetoothGATTGetServicesRequest) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +type BluetoothGATTDescriptor struct { + state protoimpl.MessageState `protogen:"open.v1"` + Uuid []uint64 `protobuf:"varint,1,rep,packed,name=uuid,proto3" json:"uuid,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + // New field for efficient UUID (v1.12+) + // Only one of uuid or short_uuid will be set. + // short_uuid is used for both 16-bit and 32-bit UUIDs with v1.12+ clients. + // 128-bit UUIDs always use the uuid field for backwards compatibility. + ShortUuid uint32 `protobuf:"varint,3,opt,name=short_uuid,json=shortUuid,proto3" json:"short_uuid,omitempty"` // 16-bit or 32-bit UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTDescriptor) Reset() { + *x = BluetoothGATTDescriptor{} + mi := &file_api_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTDescriptor) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTDescriptor) ProtoMessage() {} + +func (x *BluetoothGATTDescriptor) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[89] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTDescriptor.ProtoReflect.Descriptor instead. +func (*BluetoothGATTDescriptor) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{89} +} + +func (x *BluetoothGATTDescriptor) GetUuid() []uint64 { + if x != nil { + return x.Uuid + } + return nil +} + +func (x *BluetoothGATTDescriptor) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +func (x *BluetoothGATTDescriptor) GetShortUuid() uint32 { + if x != nil { + return x.ShortUuid + } + return 0 +} + +type BluetoothGATTCharacteristic struct { + state protoimpl.MessageState `protogen:"open.v1"` + Uuid []uint64 `protobuf:"varint,1,rep,packed,name=uuid,proto3" json:"uuid,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + Properties uint32 `protobuf:"varint,3,opt,name=properties,proto3" json:"properties,omitempty"` + Descriptors []*BluetoothGATTDescriptor `protobuf:"bytes,4,rep,name=descriptors,proto3" json:"descriptors,omitempty"` + // New field for efficient UUID (v1.12+) + // Only one of uuid or short_uuid will be set. + // short_uuid is used for both 16-bit and 32-bit UUIDs with v1.12+ clients. + // 128-bit UUIDs always use the uuid field for backwards compatibility. + ShortUuid uint32 `protobuf:"varint,5,opt,name=short_uuid,json=shortUuid,proto3" json:"short_uuid,omitempty"` // 16-bit or 32-bit UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTCharacteristic) Reset() { + *x = BluetoothGATTCharacteristic{} + mi := &file_api_proto_msgTypes[90] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTCharacteristic) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTCharacteristic) ProtoMessage() {} + +func (x *BluetoothGATTCharacteristic) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[90] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTCharacteristic.ProtoReflect.Descriptor instead. +func (*BluetoothGATTCharacteristic) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{90} +} + +func (x *BluetoothGATTCharacteristic) GetUuid() []uint64 { + if x != nil { + return x.Uuid + } + return nil +} + +func (x *BluetoothGATTCharacteristic) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +func (x *BluetoothGATTCharacteristic) GetProperties() uint32 { + if x != nil { + return x.Properties + } + return 0 +} + +func (x *BluetoothGATTCharacteristic) GetDescriptors() []*BluetoothGATTDescriptor { + if x != nil { + return x.Descriptors + } + return nil +} + +func (x *BluetoothGATTCharacteristic) GetShortUuid() uint32 { + if x != nil { + return x.ShortUuid + } + return 0 +} + +type BluetoothGATTService struct { + state protoimpl.MessageState `protogen:"open.v1"` + Uuid []uint64 `protobuf:"varint,1,rep,packed,name=uuid,proto3" json:"uuid,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + Characteristics []*BluetoothGATTCharacteristic `protobuf:"bytes,3,rep,name=characteristics,proto3" json:"characteristics,omitempty"` + // New field for efficient UUID (v1.12+) + // Only one of uuid or short_uuid will be set. + // short_uuid is used for both 16-bit and 32-bit UUIDs with v1.12+ clients. + // 128-bit UUIDs always use the uuid field for backwards compatibility. + ShortUuid uint32 `protobuf:"varint,4,opt,name=short_uuid,json=shortUuid,proto3" json:"short_uuid,omitempty"` // 16-bit or 32-bit UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTService) Reset() { + *x = BluetoothGATTService{} + mi := &file_api_proto_msgTypes[91] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTService) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTService) ProtoMessage() {} + +func (x *BluetoothGATTService) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[91] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTService.ProtoReflect.Descriptor instead. +func (*BluetoothGATTService) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{91} +} + +func (x *BluetoothGATTService) GetUuid() []uint64 { + if x != nil { + return x.Uuid + } + return nil +} + +func (x *BluetoothGATTService) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +func (x *BluetoothGATTService) GetCharacteristics() []*BluetoothGATTCharacteristic { + if x != nil { + return x.Characteristics + } + return nil +} + +func (x *BluetoothGATTService) GetShortUuid() uint32 { + if x != nil { + return x.ShortUuid + } + return 0 +} + +type BluetoothGATTGetServicesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Services []*BluetoothGATTService `protobuf:"bytes,2,rep,name=services,proto3" json:"services,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTGetServicesResponse) Reset() { + *x = BluetoothGATTGetServicesResponse{} + mi := &file_api_proto_msgTypes[92] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTGetServicesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTGetServicesResponse) ProtoMessage() {} + +func (x *BluetoothGATTGetServicesResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[92] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTGetServicesResponse.ProtoReflect.Descriptor instead. +func (*BluetoothGATTGetServicesResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{92} +} + +func (x *BluetoothGATTGetServicesResponse) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothGATTGetServicesResponse) GetServices() []*BluetoothGATTService { + if x != nil { + return x.Services + } + return nil +} + +type BluetoothGATTGetServicesDoneResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTGetServicesDoneResponse) Reset() { + *x = BluetoothGATTGetServicesDoneResponse{} + mi := &file_api_proto_msgTypes[93] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTGetServicesDoneResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTGetServicesDoneResponse) ProtoMessage() {} + +func (x *BluetoothGATTGetServicesDoneResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[93] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTGetServicesDoneResponse.ProtoReflect.Descriptor instead. +func (*BluetoothGATTGetServicesDoneResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{93} +} + +func (x *BluetoothGATTGetServicesDoneResponse) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +type BluetoothGATTReadRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTReadRequest) Reset() { + *x = BluetoothGATTReadRequest{} + mi := &file_api_proto_msgTypes[94] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTReadRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTReadRequest) ProtoMessage() {} + +func (x *BluetoothGATTReadRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[94] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTReadRequest.ProtoReflect.Descriptor instead. +func (*BluetoothGATTReadRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{94} +} + +func (x *BluetoothGATTReadRequest) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothGATTReadRequest) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +type BluetoothGATTReadResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTReadResponse) Reset() { + *x = BluetoothGATTReadResponse{} + mi := &file_api_proto_msgTypes[95] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTReadResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTReadResponse) ProtoMessage() {} + +func (x *BluetoothGATTReadResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[95] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTReadResponse.ProtoReflect.Descriptor instead. +func (*BluetoothGATTReadResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{95} +} + +func (x *BluetoothGATTReadResponse) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothGATTReadResponse) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +func (x *BluetoothGATTReadResponse) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +type BluetoothGATTWriteRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + Response bool `protobuf:"varint,3,opt,name=response,proto3" json:"response,omitempty"` + Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTWriteRequest) Reset() { + *x = BluetoothGATTWriteRequest{} + mi := &file_api_proto_msgTypes[96] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTWriteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTWriteRequest) ProtoMessage() {} + +func (x *BluetoothGATTWriteRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[96] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTWriteRequest.ProtoReflect.Descriptor instead. +func (*BluetoothGATTWriteRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{96} +} + +func (x *BluetoothGATTWriteRequest) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothGATTWriteRequest) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +func (x *BluetoothGATTWriteRequest) GetResponse() bool { + if x != nil { + return x.Response + } + return false +} + +func (x *BluetoothGATTWriteRequest) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +type BluetoothGATTReadDescriptorRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTReadDescriptorRequest) Reset() { + *x = BluetoothGATTReadDescriptorRequest{} + mi := &file_api_proto_msgTypes[97] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTReadDescriptorRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTReadDescriptorRequest) ProtoMessage() {} + +func (x *BluetoothGATTReadDescriptorRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[97] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTReadDescriptorRequest.ProtoReflect.Descriptor instead. +func (*BluetoothGATTReadDescriptorRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{97} +} + +func (x *BluetoothGATTReadDescriptorRequest) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothGATTReadDescriptorRequest) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +type BluetoothGATTWriteDescriptorRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTWriteDescriptorRequest) Reset() { + *x = BluetoothGATTWriteDescriptorRequest{} + mi := &file_api_proto_msgTypes[98] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTWriteDescriptorRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTWriteDescriptorRequest) ProtoMessage() {} + +func (x *BluetoothGATTWriteDescriptorRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[98] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTWriteDescriptorRequest.ProtoReflect.Descriptor instead. +func (*BluetoothGATTWriteDescriptorRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{98} +} + +func (x *BluetoothGATTWriteDescriptorRequest) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothGATTWriteDescriptorRequest) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +func (x *BluetoothGATTWriteDescriptorRequest) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +type BluetoothGATTNotifyRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + Enable bool `protobuf:"varint,3,opt,name=enable,proto3" json:"enable,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTNotifyRequest) Reset() { + *x = BluetoothGATTNotifyRequest{} + mi := &file_api_proto_msgTypes[99] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTNotifyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTNotifyRequest) ProtoMessage() {} + +func (x *BluetoothGATTNotifyRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[99] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTNotifyRequest.ProtoReflect.Descriptor instead. +func (*BluetoothGATTNotifyRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{99} +} + +func (x *BluetoothGATTNotifyRequest) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothGATTNotifyRequest) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +func (x *BluetoothGATTNotifyRequest) GetEnable() bool { + if x != nil { + return x.Enable + } + return false +} + +type BluetoothGATTNotifyDataResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTNotifyDataResponse) Reset() { + *x = BluetoothGATTNotifyDataResponse{} + mi := &file_api_proto_msgTypes[100] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTNotifyDataResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTNotifyDataResponse) ProtoMessage() {} + +func (x *BluetoothGATTNotifyDataResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[100] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTNotifyDataResponse.ProtoReflect.Descriptor instead. +func (*BluetoothGATTNotifyDataResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{100} +} + +func (x *BluetoothGATTNotifyDataResponse) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothGATTNotifyDataResponse) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +func (x *BluetoothGATTNotifyDataResponse) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +type SubscribeBluetoothConnectionsFreeRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscribeBluetoothConnectionsFreeRequest) Reset() { + *x = SubscribeBluetoothConnectionsFreeRequest{} + mi := &file_api_proto_msgTypes[101] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscribeBluetoothConnectionsFreeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeBluetoothConnectionsFreeRequest) ProtoMessage() {} + +func (x *SubscribeBluetoothConnectionsFreeRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[101] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeBluetoothConnectionsFreeRequest.ProtoReflect.Descriptor instead. +func (*SubscribeBluetoothConnectionsFreeRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{101} +} + +type BluetoothConnectionsFreeResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Free uint32 `protobuf:"varint,1,opt,name=free,proto3" json:"free,omitempty"` + Limit uint32 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` + Allocated []uint64 `protobuf:"varint,3,rep,packed,name=allocated,proto3" json:"allocated,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothConnectionsFreeResponse) Reset() { + *x = BluetoothConnectionsFreeResponse{} + mi := &file_api_proto_msgTypes[102] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothConnectionsFreeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothConnectionsFreeResponse) ProtoMessage() {} + +func (x *BluetoothConnectionsFreeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[102] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothConnectionsFreeResponse.ProtoReflect.Descriptor instead. +func (*BluetoothConnectionsFreeResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{102} +} + +func (x *BluetoothConnectionsFreeResponse) GetFree() uint32 { + if x != nil { + return x.Free + } + return 0 +} + +func (x *BluetoothConnectionsFreeResponse) GetLimit() uint32 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *BluetoothConnectionsFreeResponse) GetAllocated() []uint64 { + if x != nil { + return x.Allocated + } + return nil +} + +type BluetoothGATTErrorResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + Error int32 `protobuf:"varint,3,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTErrorResponse) Reset() { + *x = BluetoothGATTErrorResponse{} + mi := &file_api_proto_msgTypes[103] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTErrorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTErrorResponse) ProtoMessage() {} + +func (x *BluetoothGATTErrorResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[103] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTErrorResponse.ProtoReflect.Descriptor instead. +func (*BluetoothGATTErrorResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{103} +} + +func (x *BluetoothGATTErrorResponse) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothGATTErrorResponse) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +func (x *BluetoothGATTErrorResponse) GetError() int32 { + if x != nil { + return x.Error + } + return 0 +} + +type BluetoothGATTWriteResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTWriteResponse) Reset() { + *x = BluetoothGATTWriteResponse{} + mi := &file_api_proto_msgTypes[104] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTWriteResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTWriteResponse) ProtoMessage() {} + +func (x *BluetoothGATTWriteResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[104] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTWriteResponse.ProtoReflect.Descriptor instead. +func (*BluetoothGATTWriteResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{104} +} + +func (x *BluetoothGATTWriteResponse) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothGATTWriteResponse) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +type BluetoothGATTNotifyResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothGATTNotifyResponse) Reset() { + *x = BluetoothGATTNotifyResponse{} + mi := &file_api_proto_msgTypes[105] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothGATTNotifyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothGATTNotifyResponse) ProtoMessage() {} + +func (x *BluetoothGATTNotifyResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[105] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothGATTNotifyResponse.ProtoReflect.Descriptor instead. +func (*BluetoothGATTNotifyResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{105} +} + +func (x *BluetoothGATTNotifyResponse) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothGATTNotifyResponse) GetHandle() uint32 { + if x != nil { + return x.Handle + } + return 0 +} + +type BluetoothDevicePairingResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Paired bool `protobuf:"varint,2,opt,name=paired,proto3" json:"paired,omitempty"` + Error int32 `protobuf:"varint,3,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothDevicePairingResponse) Reset() { + *x = BluetoothDevicePairingResponse{} + mi := &file_api_proto_msgTypes[106] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothDevicePairingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothDevicePairingResponse) ProtoMessage() {} + +func (x *BluetoothDevicePairingResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[106] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothDevicePairingResponse.ProtoReflect.Descriptor instead. +func (*BluetoothDevicePairingResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{106} +} + +func (x *BluetoothDevicePairingResponse) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothDevicePairingResponse) GetPaired() bool { + if x != nil { + return x.Paired + } + return false +} + +func (x *BluetoothDevicePairingResponse) GetError() int32 { + if x != nil { + return x.Error + } + return 0 +} + +type BluetoothDeviceUnpairingResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"` + Error int32 `protobuf:"varint,3,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothDeviceUnpairingResponse) Reset() { + *x = BluetoothDeviceUnpairingResponse{} + mi := &file_api_proto_msgTypes[107] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothDeviceUnpairingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothDeviceUnpairingResponse) ProtoMessage() {} + +func (x *BluetoothDeviceUnpairingResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[107] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothDeviceUnpairingResponse.ProtoReflect.Descriptor instead. +func (*BluetoothDeviceUnpairingResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{107} +} + +func (x *BluetoothDeviceUnpairingResponse) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothDeviceUnpairingResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *BluetoothDeviceUnpairingResponse) GetError() int32 { + if x != nil { + return x.Error + } + return 0 +} + +type UnsubscribeBluetoothLEAdvertisementsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UnsubscribeBluetoothLEAdvertisementsRequest) Reset() { + *x = UnsubscribeBluetoothLEAdvertisementsRequest{} + mi := &file_api_proto_msgTypes[108] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UnsubscribeBluetoothLEAdvertisementsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnsubscribeBluetoothLEAdvertisementsRequest) ProtoMessage() {} + +func (x *UnsubscribeBluetoothLEAdvertisementsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[108] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnsubscribeBluetoothLEAdvertisementsRequest.ProtoReflect.Descriptor instead. +func (*UnsubscribeBluetoothLEAdvertisementsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{108} +} + +type BluetoothDeviceClearCacheResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"` + Error int32 `protobuf:"varint,3,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothDeviceClearCacheResponse) Reset() { + *x = BluetoothDeviceClearCacheResponse{} + mi := &file_api_proto_msgTypes[109] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothDeviceClearCacheResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothDeviceClearCacheResponse) ProtoMessage() {} + +func (x *BluetoothDeviceClearCacheResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[109] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothDeviceClearCacheResponse.ProtoReflect.Descriptor instead. +func (*BluetoothDeviceClearCacheResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{109} +} + +func (x *BluetoothDeviceClearCacheResponse) GetAddress() uint64 { + if x != nil { + return x.Address + } + return 0 +} + +func (x *BluetoothDeviceClearCacheResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *BluetoothDeviceClearCacheResponse) GetError() int32 { + if x != nil { + return x.Error + } + return 0 +} + +type BluetoothScannerStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + State BluetoothScannerState `protobuf:"varint,1,opt,name=state,proto3,enum=BluetoothScannerState" json:"state,omitempty"` + Mode BluetoothScannerMode `protobuf:"varint,2,opt,name=mode,proto3,enum=BluetoothScannerMode" json:"mode,omitempty"` + ConfiguredMode BluetoothScannerMode `protobuf:"varint,3,opt,name=configured_mode,json=configuredMode,proto3,enum=BluetoothScannerMode" json:"configured_mode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothScannerStateResponse) Reset() { + *x = BluetoothScannerStateResponse{} + mi := &file_api_proto_msgTypes[110] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothScannerStateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothScannerStateResponse) ProtoMessage() {} + +func (x *BluetoothScannerStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[110] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothScannerStateResponse.ProtoReflect.Descriptor instead. +func (*BluetoothScannerStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{110} +} + +func (x *BluetoothScannerStateResponse) GetState() BluetoothScannerState { + if x != nil { + return x.State + } + return BluetoothScannerState_BLUETOOTH_SCANNER_STATE_IDLE +} + +func (x *BluetoothScannerStateResponse) GetMode() BluetoothScannerMode { + if x != nil { + return x.Mode + } + return BluetoothScannerMode_BLUETOOTH_SCANNER_MODE_PASSIVE +} + +func (x *BluetoothScannerStateResponse) GetConfiguredMode() BluetoothScannerMode { + if x != nil { + return x.ConfiguredMode + } + return BluetoothScannerMode_BLUETOOTH_SCANNER_MODE_PASSIVE +} + +type BluetoothScannerSetModeRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Mode BluetoothScannerMode `protobuf:"varint,1,opt,name=mode,proto3,enum=BluetoothScannerMode" json:"mode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothScannerSetModeRequest) Reset() { + *x = BluetoothScannerSetModeRequest{} + mi := &file_api_proto_msgTypes[111] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothScannerSetModeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BluetoothScannerSetModeRequest) ProtoMessage() {} + +func (x *BluetoothScannerSetModeRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[111] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BluetoothScannerSetModeRequest.ProtoReflect.Descriptor instead. +func (*BluetoothScannerSetModeRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{111} +} + +func (x *BluetoothScannerSetModeRequest) GetMode() BluetoothScannerMode { + if x != nil { + return x.Mode + } + return BluetoothScannerMode_BLUETOOTH_SCANNER_MODE_PASSIVE +} + +type SubscribeVoiceAssistantRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Subscribe bool `protobuf:"varint,1,opt,name=subscribe,proto3" json:"subscribe,omitempty"` + Flags uint32 `protobuf:"varint,2,opt,name=flags,proto3" json:"flags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscribeVoiceAssistantRequest) Reset() { + *x = SubscribeVoiceAssistantRequest{} + mi := &file_api_proto_msgTypes[112] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscribeVoiceAssistantRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeVoiceAssistantRequest) ProtoMessage() {} + +func (x *SubscribeVoiceAssistantRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[112] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeVoiceAssistantRequest.ProtoReflect.Descriptor instead. +func (*SubscribeVoiceAssistantRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{112} +} + +func (x *SubscribeVoiceAssistantRequest) GetSubscribe() bool { + if x != nil { + return x.Subscribe + } + return false +} + +func (x *SubscribeVoiceAssistantRequest) GetFlags() uint32 { + if x != nil { + return x.Flags + } + return 0 +} + +type VoiceAssistantAudioSettings struct { + state protoimpl.MessageState `protogen:"open.v1"` + NoiseSuppressionLevel uint32 `protobuf:"varint,1,opt,name=noise_suppression_level,json=noiseSuppressionLevel,proto3" json:"noise_suppression_level,omitempty"` + AutoGain uint32 `protobuf:"varint,2,opt,name=auto_gain,json=autoGain,proto3" json:"auto_gain,omitempty"` + VolumeMultiplier float32 `protobuf:"fixed32,3,opt,name=volume_multiplier,json=volumeMultiplier,proto3" json:"volume_multiplier,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VoiceAssistantAudioSettings) Reset() { + *x = VoiceAssistantAudioSettings{} + mi := &file_api_proto_msgTypes[113] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VoiceAssistantAudioSettings) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VoiceAssistantAudioSettings) ProtoMessage() {} + +func (x *VoiceAssistantAudioSettings) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[113] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VoiceAssistantAudioSettings.ProtoReflect.Descriptor instead. +func (*VoiceAssistantAudioSettings) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{113} +} + +func (x *VoiceAssistantAudioSettings) GetNoiseSuppressionLevel() uint32 { + if x != nil { + return x.NoiseSuppressionLevel + } + return 0 +} + +func (x *VoiceAssistantAudioSettings) GetAutoGain() uint32 { + if x != nil { + return x.AutoGain + } + return 0 +} + +func (x *VoiceAssistantAudioSettings) GetVolumeMultiplier() float32 { + if x != nil { + return x.VolumeMultiplier + } + return 0 +} + +type VoiceAssistantRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Start bool `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"` + ConversationId string `protobuf:"bytes,2,opt,name=conversation_id,json=conversationId,proto3" json:"conversation_id,omitempty"` + Flags uint32 `protobuf:"varint,3,opt,name=flags,proto3" json:"flags,omitempty"` + AudioSettings *VoiceAssistantAudioSettings `protobuf:"bytes,4,opt,name=audio_settings,json=audioSettings,proto3" json:"audio_settings,omitempty"` + WakeWordPhrase string `protobuf:"bytes,5,opt,name=wake_word_phrase,json=wakeWordPhrase,proto3" json:"wake_word_phrase,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VoiceAssistantRequest) Reset() { + *x = VoiceAssistantRequest{} + mi := &file_api_proto_msgTypes[114] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VoiceAssistantRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VoiceAssistantRequest) ProtoMessage() {} + +func (x *VoiceAssistantRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[114] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VoiceAssistantRequest.ProtoReflect.Descriptor instead. +func (*VoiceAssistantRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{114} +} + +func (x *VoiceAssistantRequest) GetStart() bool { + if x != nil { + return x.Start + } + return false +} + +func (x *VoiceAssistantRequest) GetConversationId() string { + if x != nil { + return x.ConversationId + } + return "" +} + +func (x *VoiceAssistantRequest) GetFlags() uint32 { + if x != nil { + return x.Flags + } + return 0 +} + +func (x *VoiceAssistantRequest) GetAudioSettings() *VoiceAssistantAudioSettings { + if x != nil { + return x.AudioSettings + } + return nil +} + +func (x *VoiceAssistantRequest) GetWakeWordPhrase() string { + if x != nil { + return x.WakeWordPhrase + } + return "" +} + +type VoiceAssistantResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Port uint32 `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"` + Error bool `protobuf:"varint,2,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VoiceAssistantResponse) Reset() { + *x = VoiceAssistantResponse{} + mi := &file_api_proto_msgTypes[115] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VoiceAssistantResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VoiceAssistantResponse) ProtoMessage() {} + +func (x *VoiceAssistantResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[115] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VoiceAssistantResponse.ProtoReflect.Descriptor instead. +func (*VoiceAssistantResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{115} +} + +func (x *VoiceAssistantResponse) GetPort() uint32 { + if x != nil { + return x.Port + } + return 0 +} + +func (x *VoiceAssistantResponse) GetError() bool { + if x != nil { + return x.Error + } + return false +} + +type VoiceAssistantEventData struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VoiceAssistantEventData) Reset() { + *x = VoiceAssistantEventData{} + mi := &file_api_proto_msgTypes[116] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VoiceAssistantEventData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VoiceAssistantEventData) ProtoMessage() {} + +func (x *VoiceAssistantEventData) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[116] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VoiceAssistantEventData.ProtoReflect.Descriptor instead. +func (*VoiceAssistantEventData) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{116} +} + +func (x *VoiceAssistantEventData) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *VoiceAssistantEventData) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +type VoiceAssistantEventResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + EventType VoiceAssistantEvent `protobuf:"varint,1,opt,name=event_type,json=eventType,proto3,enum=VoiceAssistantEvent" json:"event_type,omitempty"` + Data []*VoiceAssistantEventData `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VoiceAssistantEventResponse) Reset() { + *x = VoiceAssistantEventResponse{} + mi := &file_api_proto_msgTypes[117] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VoiceAssistantEventResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VoiceAssistantEventResponse) ProtoMessage() {} + +func (x *VoiceAssistantEventResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[117] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VoiceAssistantEventResponse.ProtoReflect.Descriptor instead. +func (*VoiceAssistantEventResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{117} +} + +func (x *VoiceAssistantEventResponse) GetEventType() VoiceAssistantEvent { + if x != nil { + return x.EventType + } + return VoiceAssistantEvent_VOICE_ASSISTANT_ERROR +} -func (*BluetoothGATTGetServicesRequest) ProtoMessage() {} +func (x *VoiceAssistantEventResponse) GetData() []*VoiceAssistantEventData { + if x != nil { + return x.Data + } + return nil +} -func (x *BluetoothGATTGetServicesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[72] - if protoimpl.UnsafeEnabled && x != nil { +type VoiceAssistantAudio struct { + state protoimpl.MessageState `protogen:"open.v1"` + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + End bool `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"` + Data2 []byte `protobuf:"bytes,3,opt,name=data2,proto3" json:"data2,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VoiceAssistantAudio) Reset() { + *x = VoiceAssistantAudio{} + mi := &file_api_proto_msgTypes[118] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VoiceAssistantAudio) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VoiceAssistantAudio) ProtoMessage() {} + +func (x *VoiceAssistantAudio) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[118] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7778,45 +11880,142 @@ func (x *BluetoothGATTGetServicesRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTGetServicesRequest.ProtoReflect.Descriptor instead. -func (*BluetoothGATTGetServicesRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{72} +// Deprecated: Use VoiceAssistantAudio.ProtoReflect.Descriptor instead. +func (*VoiceAssistantAudio) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{118} } -func (x *BluetoothGATTGetServicesRequest) GetAddress() uint64 { +func (x *VoiceAssistantAudio) GetData() []byte { if x != nil { - return x.Address + return x.Data } - return 0 + return nil } -type BluetoothGATTDescriptor struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +func (x *VoiceAssistantAudio) GetEnd() bool { + if x != nil { + return x.End + } + return false +} + +func (x *VoiceAssistantAudio) GetData2() []byte { + if x != nil { + return x.Data2 + } + return nil +} + +type VoiceAssistantTimerEventResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + EventType VoiceAssistantTimerEvent `protobuf:"varint,1,opt,name=event_type,json=eventType,proto3,enum=VoiceAssistantTimerEvent" json:"event_type,omitempty"` + TimerId string `protobuf:"bytes,2,opt,name=timer_id,json=timerId,proto3" json:"timer_id,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + TotalSeconds uint32 `protobuf:"varint,4,opt,name=total_seconds,json=totalSeconds,proto3" json:"total_seconds,omitempty"` + SecondsLeft uint32 `protobuf:"varint,5,opt,name=seconds_left,json=secondsLeft,proto3" json:"seconds_left,omitempty"` + IsActive bool `protobuf:"varint,6,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - Uuid []uint64 `protobuf:"varint,1,rep,packed,name=uuid,proto3" json:"uuid,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` +func (x *VoiceAssistantTimerEventResponse) Reset() { + *x = VoiceAssistantTimerEventResponse{} + mi := &file_api_proto_msgTypes[119] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothGATTDescriptor) Reset() { - *x = BluetoothGATTDescriptor{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[73] +func (x *VoiceAssistantTimerEventResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VoiceAssistantTimerEventResponse) ProtoMessage() {} + +func (x *VoiceAssistantTimerEventResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[119] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } + return mi.MessageOf(x) } -func (x *BluetoothGATTDescriptor) String() string { +// Deprecated: Use VoiceAssistantTimerEventResponse.ProtoReflect.Descriptor instead. +func (*VoiceAssistantTimerEventResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{119} +} + +func (x *VoiceAssistantTimerEventResponse) GetEventType() VoiceAssistantTimerEvent { + if x != nil { + return x.EventType + } + return VoiceAssistantTimerEvent_VOICE_ASSISTANT_TIMER_STARTED +} + +func (x *VoiceAssistantTimerEventResponse) GetTimerId() string { + if x != nil { + return x.TimerId + } + return "" +} + +func (x *VoiceAssistantTimerEventResponse) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *VoiceAssistantTimerEventResponse) GetTotalSeconds() uint32 { + if x != nil { + return x.TotalSeconds + } + return 0 +} + +func (x *VoiceAssistantTimerEventResponse) GetSecondsLeft() uint32 { + if x != nil { + return x.SecondsLeft + } + return 0 +} + +func (x *VoiceAssistantTimerEventResponse) GetIsActive() bool { + if x != nil { + return x.IsActive + } + return false +} + +type VoiceAssistantAnnounceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaId string `protobuf:"bytes,1,opt,name=media_id,json=mediaId,proto3" json:"media_id,omitempty"` + Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + PreannounceMediaId string `protobuf:"bytes,3,opt,name=preannounce_media_id,json=preannounceMediaId,proto3" json:"preannounce_media_id,omitempty"` + StartConversation bool `protobuf:"varint,4,opt,name=start_conversation,json=startConversation,proto3" json:"start_conversation,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VoiceAssistantAnnounceRequest) Reset() { + *x = VoiceAssistantAnnounceRequest{} + mi := &file_api_proto_msgTypes[120] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VoiceAssistantAnnounceRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTDescriptor) ProtoMessage() {} +func (*VoiceAssistantAnnounceRequest) ProtoMessage() {} -func (x *BluetoothGATTDescriptor) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[73] - if protoimpl.UnsafeEnabled && x != nil { +func (x *VoiceAssistantAnnounceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[120] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7826,54 +12025,108 @@ func (x *BluetoothGATTDescriptor) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTDescriptor.ProtoReflect.Descriptor instead. -func (*BluetoothGATTDescriptor) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{73} +// Deprecated: Use VoiceAssistantAnnounceRequest.ProtoReflect.Descriptor instead. +func (*VoiceAssistantAnnounceRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{120} } -func (x *BluetoothGATTDescriptor) GetUuid() []uint64 { +func (x *VoiceAssistantAnnounceRequest) GetMediaId() string { if x != nil { - return x.Uuid + return x.MediaId } - return nil + return "" } -func (x *BluetoothGATTDescriptor) GetHandle() uint32 { +func (x *VoiceAssistantAnnounceRequest) GetText() string { if x != nil { - return x.Handle + return x.Text } - return 0 + return "" } -type BluetoothGATTCharacteristic struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +func (x *VoiceAssistantAnnounceRequest) GetPreannounceMediaId() string { + if x != nil { + return x.PreannounceMediaId + } + return "" +} + +func (x *VoiceAssistantAnnounceRequest) GetStartConversation() bool { + if x != nil { + return x.StartConversation + } + return false +} + +type VoiceAssistantAnnounceFinished struct { + state protoimpl.MessageState `protogen:"open.v1"` + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - Uuid []uint64 `protobuf:"varint,1,rep,packed,name=uuid,proto3" json:"uuid,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` - Properties uint32 `protobuf:"varint,3,opt,name=properties,proto3" json:"properties,omitempty"` - Descriptors []*BluetoothGATTDescriptor `protobuf:"bytes,4,rep,name=descriptors,proto3" json:"descriptors,omitempty"` +func (x *VoiceAssistantAnnounceFinished) Reset() { + *x = VoiceAssistantAnnounceFinished{} + mi := &file_api_proto_msgTypes[121] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothGATTCharacteristic) Reset() { - *x = BluetoothGATTCharacteristic{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[74] +func (x *VoiceAssistantAnnounceFinished) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VoiceAssistantAnnounceFinished) ProtoMessage() {} + +func (x *VoiceAssistantAnnounceFinished) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[121] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } + return mi.MessageOf(x) } -func (x *BluetoothGATTCharacteristic) String() string { +// Deprecated: Use VoiceAssistantAnnounceFinished.ProtoReflect.Descriptor instead. +func (*VoiceAssistantAnnounceFinished) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{121} +} + +func (x *VoiceAssistantAnnounceFinished) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +type VoiceAssistantWakeWord struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + WakeWord string `protobuf:"bytes,2,opt,name=wake_word,json=wakeWord,proto3" json:"wake_word,omitempty"` + TrainedLanguages []string `protobuf:"bytes,3,rep,name=trained_languages,json=trainedLanguages,proto3" json:"trained_languages,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VoiceAssistantWakeWord) Reset() { + *x = VoiceAssistantWakeWord{} + mi := &file_api_proto_msgTypes[122] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VoiceAssistantWakeWord) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTCharacteristic) ProtoMessage() {} +func (*VoiceAssistantWakeWord) ProtoMessage() {} -func (x *BluetoothGATTCharacteristic) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[74] - if protoimpl.UnsafeEnabled && x != nil { +func (x *VoiceAssistantWakeWord) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[122] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7883,67 +12136,193 @@ func (x *BluetoothGATTCharacteristic) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTCharacteristic.ProtoReflect.Descriptor instead. -func (*BluetoothGATTCharacteristic) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{74} +// Deprecated: Use VoiceAssistantWakeWord.ProtoReflect.Descriptor instead. +func (*VoiceAssistantWakeWord) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{122} +} + +func (x *VoiceAssistantWakeWord) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VoiceAssistantWakeWord) GetWakeWord() string { + if x != nil { + return x.WakeWord + } + return "" +} + +func (x *VoiceAssistantWakeWord) GetTrainedLanguages() []string { + if x != nil { + return x.TrainedLanguages + } + return nil +} + +type VoiceAssistantExternalWakeWord struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + WakeWord string `protobuf:"bytes,2,opt,name=wake_word,json=wakeWord,proto3" json:"wake_word,omitempty"` + TrainedLanguages []string `protobuf:"bytes,3,rep,name=trained_languages,json=trainedLanguages,proto3" json:"trained_languages,omitempty"` + ModelType string `protobuf:"bytes,4,opt,name=model_type,json=modelType,proto3" json:"model_type,omitempty"` + ModelSize uint32 `protobuf:"varint,5,opt,name=model_size,json=modelSize,proto3" json:"model_size,omitempty"` + ModelHash string `protobuf:"bytes,6,opt,name=model_hash,json=modelHash,proto3" json:"model_hash,omitempty"` + Url string `protobuf:"bytes,7,opt,name=url,proto3" json:"url,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VoiceAssistantExternalWakeWord) Reset() { + *x = VoiceAssistantExternalWakeWord{} + mi := &file_api_proto_msgTypes[123] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VoiceAssistantExternalWakeWord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VoiceAssistantExternalWakeWord) ProtoMessage() {} + +func (x *VoiceAssistantExternalWakeWord) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[123] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VoiceAssistantExternalWakeWord.ProtoReflect.Descriptor instead. +func (*VoiceAssistantExternalWakeWord) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{123} +} + +func (x *VoiceAssistantExternalWakeWord) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VoiceAssistantExternalWakeWord) GetWakeWord() string { + if x != nil { + return x.WakeWord + } + return "" +} + +func (x *VoiceAssistantExternalWakeWord) GetTrainedLanguages() []string { + if x != nil { + return x.TrainedLanguages + } + return nil +} + +func (x *VoiceAssistantExternalWakeWord) GetModelType() string { + if x != nil { + return x.ModelType + } + return "" +} + +func (x *VoiceAssistantExternalWakeWord) GetModelSize() uint32 { + if x != nil { + return x.ModelSize + } + return 0 +} + +func (x *VoiceAssistantExternalWakeWord) GetModelHash() string { + if x != nil { + return x.ModelHash + } + return "" +} + +func (x *VoiceAssistantExternalWakeWord) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +type VoiceAssistantConfigurationRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ExternalWakeWords []*VoiceAssistantExternalWakeWord `protobuf:"bytes,1,rep,name=external_wake_words,json=externalWakeWords,proto3" json:"external_wake_words,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VoiceAssistantConfigurationRequest) Reset() { + *x = VoiceAssistantConfigurationRequest{} + mi := &file_api_proto_msgTypes[124] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VoiceAssistantConfigurationRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *BluetoothGATTCharacteristic) GetUuid() []uint64 { - if x != nil { - return x.Uuid - } - return nil -} +func (*VoiceAssistantConfigurationRequest) ProtoMessage() {} -func (x *BluetoothGATTCharacteristic) GetHandle() uint32 { +func (x *VoiceAssistantConfigurationRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[124] if x != nil { - return x.Handle + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (x *BluetoothGATTCharacteristic) GetProperties() uint32 { - if x != nil { - return x.Properties - } - return 0 +// Deprecated: Use VoiceAssistantConfigurationRequest.ProtoReflect.Descriptor instead. +func (*VoiceAssistantConfigurationRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{124} } -func (x *BluetoothGATTCharacteristic) GetDescriptors() []*BluetoothGATTDescriptor { +func (x *VoiceAssistantConfigurationRequest) GetExternalWakeWords() []*VoiceAssistantExternalWakeWord { if x != nil { - return x.Descriptors + return x.ExternalWakeWords } return nil } -type BluetoothGATTService struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Uuid []uint64 `protobuf:"varint,1,rep,packed,name=uuid,proto3" json:"uuid,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` - Characteristics []*BluetoothGATTCharacteristic `protobuf:"bytes,3,rep,name=characteristics,proto3" json:"characteristics,omitempty"` +type VoiceAssistantConfigurationResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + AvailableWakeWords []*VoiceAssistantWakeWord `protobuf:"bytes,1,rep,name=available_wake_words,json=availableWakeWords,proto3" json:"available_wake_words,omitempty"` + ActiveWakeWords []string `protobuf:"bytes,2,rep,name=active_wake_words,json=activeWakeWords,proto3" json:"active_wake_words,omitempty"` + MaxActiveWakeWords uint32 `protobuf:"varint,3,opt,name=max_active_wake_words,json=maxActiveWakeWords,proto3" json:"max_active_wake_words,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BluetoothGATTService) Reset() { - *x = BluetoothGATTService{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[75] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *VoiceAssistantConfigurationResponse) Reset() { + *x = VoiceAssistantConfigurationResponse{} + mi := &file_api_proto_msgTypes[125] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothGATTService) String() string { +func (x *VoiceAssistantConfigurationResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTService) ProtoMessage() {} +func (*VoiceAssistantConfigurationResponse) ProtoMessage() {} -func (x *BluetoothGATTService) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[75] - if protoimpl.UnsafeEnabled && x != nil { +func (x *VoiceAssistantConfigurationResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[125] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7953,59 +12332,55 @@ func (x *BluetoothGATTService) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTService.ProtoReflect.Descriptor instead. -func (*BluetoothGATTService) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{75} +// Deprecated: Use VoiceAssistantConfigurationResponse.ProtoReflect.Descriptor instead. +func (*VoiceAssistantConfigurationResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{125} } -func (x *BluetoothGATTService) GetUuid() []uint64 { +func (x *VoiceAssistantConfigurationResponse) GetAvailableWakeWords() []*VoiceAssistantWakeWord { if x != nil { - return x.Uuid + return x.AvailableWakeWords } return nil } -func (x *BluetoothGATTService) GetHandle() uint32 { +func (x *VoiceAssistantConfigurationResponse) GetActiveWakeWords() []string { if x != nil { - return x.Handle + return x.ActiveWakeWords } - return 0 + return nil } -func (x *BluetoothGATTService) GetCharacteristics() []*BluetoothGATTCharacteristic { +func (x *VoiceAssistantConfigurationResponse) GetMaxActiveWakeWords() uint32 { if x != nil { - return x.Characteristics + return x.MaxActiveWakeWords } - return nil + return 0 } -type BluetoothGATTGetServicesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Services []*BluetoothGATTService `protobuf:"bytes,2,rep,name=services,proto3" json:"services,omitempty"` +type VoiceAssistantSetConfiguration struct { + state protoimpl.MessageState `protogen:"open.v1"` + ActiveWakeWords []string `protobuf:"bytes,1,rep,name=active_wake_words,json=activeWakeWords,proto3" json:"active_wake_words,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BluetoothGATTGetServicesResponse) Reset() { - *x = BluetoothGATTGetServicesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[76] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *VoiceAssistantSetConfiguration) Reset() { + *x = VoiceAssistantSetConfiguration{} + mi := &file_api_proto_msgTypes[126] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothGATTGetServicesResponse) String() string { +func (x *VoiceAssistantSetConfiguration) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTGetServicesResponse) ProtoMessage() {} +func (*VoiceAssistantSetConfiguration) ProtoMessage() {} -func (x *BluetoothGATTGetServicesResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[76] - if protoimpl.UnsafeEnabled && x != nil { +func (x *VoiceAssistantSetConfiguration) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[126] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8015,51 +12390,50 @@ func (x *BluetoothGATTGetServicesResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTGetServicesResponse.ProtoReflect.Descriptor instead. -func (*BluetoothGATTGetServicesResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{76} -} - -func (x *BluetoothGATTGetServicesResponse) GetAddress() uint64 { - if x != nil { - return x.Address - } - return 0 +// Deprecated: Use VoiceAssistantSetConfiguration.ProtoReflect.Descriptor instead. +func (*VoiceAssistantSetConfiguration) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{126} } -func (x *BluetoothGATTGetServicesResponse) GetServices() []*BluetoothGATTService { +func (x *VoiceAssistantSetConfiguration) GetActiveWakeWords() []string { if x != nil { - return x.Services + return x.ActiveWakeWords } return nil } -type BluetoothGATTGetServicesDoneResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` +type ListEntitiesAlarmControlPanelResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + SupportedFeatures uint32 `protobuf:"varint,8,opt,name=supported_features,json=supportedFeatures,proto3" json:"supported_features,omitempty"` + RequiresCode bool `protobuf:"varint,9,opt,name=requires_code,json=requiresCode,proto3" json:"requires_code,omitempty"` + RequiresCodeToArm bool `protobuf:"varint,10,opt,name=requires_code_to_arm,json=requiresCodeToArm,proto3" json:"requires_code_to_arm,omitempty"` + DeviceId uint32 `protobuf:"varint,11,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BluetoothGATTGetServicesDoneResponse) Reset() { - *x = BluetoothGATTGetServicesDoneResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[77] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListEntitiesAlarmControlPanelResponse) Reset() { + *x = ListEntitiesAlarmControlPanelResponse{} + mi := &file_api_proto_msgTypes[127] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothGATTGetServicesDoneResponse) String() string { +func (x *ListEntitiesAlarmControlPanelResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTGetServicesDoneResponse) ProtoMessage() {} +func (*ListEntitiesAlarmControlPanelResponse) ProtoMessage() {} -func (x *BluetoothGATTGetServicesDoneResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[77] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesAlarmControlPanelResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[127] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8069,101 +12443,106 @@ func (x *BluetoothGATTGetServicesDoneResponse) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTGetServicesDoneResponse.ProtoReflect.Descriptor instead. -func (*BluetoothGATTGetServicesDoneResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{77} +// Deprecated: Use ListEntitiesAlarmControlPanelResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesAlarmControlPanelResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{127} } -func (x *BluetoothGATTGetServicesDoneResponse) GetAddress() uint64 { +func (x *ListEntitiesAlarmControlPanelResponse) GetObjectId() string { if x != nil { - return x.Address + return x.ObjectId } - return 0 + return "" } -type BluetoothGATTReadRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesAlarmControlPanelResponse) GetKey() uint32 { + if x != nil { + return x.Key + } + return 0 +} - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` +func (x *ListEntitiesAlarmControlPanelResponse) GetName() string { + if x != nil { + return x.Name + } + return "" } -func (x *BluetoothGATTReadRequest) Reset() { - *x = BluetoothGATTReadRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[78] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ListEntitiesAlarmControlPanelResponse) GetIcon() string { + if x != nil { + return x.Icon } + return "" } -func (x *BluetoothGATTReadRequest) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *ListEntitiesAlarmControlPanelResponse) GetDisabledByDefault() bool { + if x != nil { + return x.DisabledByDefault + } + return false } -func (*BluetoothGATTReadRequest) ProtoMessage() {} +func (x *ListEntitiesAlarmControlPanelResponse) GetEntityCategory() EntityCategory { + if x != nil { + return x.EntityCategory + } + return EntityCategory_ENTITY_CATEGORY_NONE +} -func (x *BluetoothGATTReadRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[78] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ListEntitiesAlarmControlPanelResponse) GetSupportedFeatures() uint32 { + if x != nil { + return x.SupportedFeatures } - return mi.MessageOf(x) + return 0 } -// Deprecated: Use BluetoothGATTReadRequest.ProtoReflect.Descriptor instead. -func (*BluetoothGATTReadRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{78} +func (x *ListEntitiesAlarmControlPanelResponse) GetRequiresCode() bool { + if x != nil { + return x.RequiresCode + } + return false } -func (x *BluetoothGATTReadRequest) GetAddress() uint64 { +func (x *ListEntitiesAlarmControlPanelResponse) GetRequiresCodeToArm() bool { if x != nil { - return x.Address + return x.RequiresCodeToArm } - return 0 + return false } -func (x *BluetoothGATTReadRequest) GetHandle() uint32 { +func (x *ListEntitiesAlarmControlPanelResponse) GetDeviceId() uint32 { if x != nil { - return x.Handle + return x.DeviceId } return 0 } -type BluetoothGATTReadResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type AlarmControlPanelStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State AlarmControlPanelState `protobuf:"varint,2,opt,name=state,proto3,enum=AlarmControlPanelState" json:"state,omitempty"` + DeviceId uint32 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` - Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *BluetoothGATTReadResponse) Reset() { - *x = BluetoothGATTReadResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[79] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *AlarmControlPanelStateResponse) Reset() { + *x = AlarmControlPanelStateResponse{} + mi := &file_api_proto_msgTypes[128] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothGATTReadResponse) String() string { +func (x *AlarmControlPanelStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTReadResponse) ProtoMessage() {} +func (*AlarmControlPanelStateResponse) ProtoMessage() {} -func (x *BluetoothGATTReadResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[79] - if protoimpl.UnsafeEnabled && x != nil { +func (x *AlarmControlPanelStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[128] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8173,61 +12552,58 @@ func (x *BluetoothGATTReadResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTReadResponse.ProtoReflect.Descriptor instead. -func (*BluetoothGATTReadResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{79} +// Deprecated: Use AlarmControlPanelStateResponse.ProtoReflect.Descriptor instead. +func (*AlarmControlPanelStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{128} } -func (x *BluetoothGATTReadResponse) GetAddress() uint64 { +func (x *AlarmControlPanelStateResponse) GetKey() uint32 { if x != nil { - return x.Address + return x.Key } return 0 } -func (x *BluetoothGATTReadResponse) GetHandle() uint32 { +func (x *AlarmControlPanelStateResponse) GetState() AlarmControlPanelState { if x != nil { - return x.Handle + return x.State } - return 0 + return AlarmControlPanelState_ALARM_STATE_DISARMED } -func (x *BluetoothGATTReadResponse) GetData() []byte { +func (x *AlarmControlPanelStateResponse) GetDeviceId() uint32 { if x != nil { - return x.Data + return x.DeviceId } - return nil + return 0 } -type BluetoothGATTWriteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type AlarmControlPanelCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + Command AlarmControlPanelStateCommand `protobuf:"varint,2,opt,name=command,proto3,enum=AlarmControlPanelStateCommand" json:"command,omitempty"` + Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` + DeviceId uint32 `protobuf:"varint,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` - Response bool `protobuf:"varint,3,opt,name=response,proto3" json:"response,omitempty"` - Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *BluetoothGATTWriteRequest) Reset() { - *x = BluetoothGATTWriteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[80] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *AlarmControlPanelCommandRequest) Reset() { + *x = AlarmControlPanelCommandRequest{} + mi := &file_api_proto_msgTypes[129] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothGATTWriteRequest) String() string { +func (x *AlarmControlPanelCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTWriteRequest) ProtoMessage() {} +func (*AlarmControlPanelCommandRequest) ProtoMessage() {} -func (x *BluetoothGATTWriteRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[80] - if protoimpl.UnsafeEnabled && x != nil { +func (x *AlarmControlPanelCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[129] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8237,66 +12613,72 @@ func (x *BluetoothGATTWriteRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTWriteRequest.ProtoReflect.Descriptor instead. -func (*BluetoothGATTWriteRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{80} +// Deprecated: Use AlarmControlPanelCommandRequest.ProtoReflect.Descriptor instead. +func (*AlarmControlPanelCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{129} } -func (x *BluetoothGATTWriteRequest) GetAddress() uint64 { +func (x *AlarmControlPanelCommandRequest) GetKey() uint32 { if x != nil { - return x.Address + return x.Key } return 0 } -func (x *BluetoothGATTWriteRequest) GetHandle() uint32 { +func (x *AlarmControlPanelCommandRequest) GetCommand() AlarmControlPanelStateCommand { if x != nil { - return x.Handle + return x.Command } - return 0 + return AlarmControlPanelStateCommand_ALARM_CONTROL_PANEL_DISARM } -func (x *BluetoothGATTWriteRequest) GetResponse() bool { +func (x *AlarmControlPanelCommandRequest) GetCode() string { if x != nil { - return x.Response + return x.Code } - return false + return "" } -func (x *BluetoothGATTWriteRequest) GetData() []byte { +func (x *AlarmControlPanelCommandRequest) GetDeviceId() uint32 { if x != nil { - return x.Data + return x.DeviceId } - return nil + return 0 } -type BluetoothGATTReadDescriptorRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` +type ListEntitiesTextResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + MinLength uint32 `protobuf:"varint,8,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + MaxLength uint32 `protobuf:"varint,9,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` + Pattern string `protobuf:"bytes,10,opt,name=pattern,proto3" json:"pattern,omitempty"` + Mode TextMode `protobuf:"varint,11,opt,name=mode,proto3,enum=TextMode" json:"mode,omitempty"` + DeviceId uint32 `protobuf:"varint,12,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BluetoothGATTReadDescriptorRequest) Reset() { - *x = BluetoothGATTReadDescriptorRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[81] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListEntitiesTextResponse) Reset() { + *x = ListEntitiesTextResponse{} + mi := &file_api_proto_msgTypes[130] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothGATTReadDescriptorRequest) String() string { +func (x *ListEntitiesTextResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTReadDescriptorRequest) ProtoMessage() {} +func (*ListEntitiesTextResponse) ProtoMessage() {} -func (x *BluetoothGATTReadDescriptorRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[81] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesTextResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[130] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8306,116 +12688,116 @@ func (x *BluetoothGATTReadDescriptorRequest) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTReadDescriptorRequest.ProtoReflect.Descriptor instead. -func (*BluetoothGATTReadDescriptorRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{81} +// Deprecated: Use ListEntitiesTextResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesTextResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{130} } -func (x *BluetoothGATTReadDescriptorRequest) GetAddress() uint64 { +func (x *ListEntitiesTextResponse) GetObjectId() string { if x != nil { - return x.Address + return x.ObjectId } - return 0 + return "" } -func (x *BluetoothGATTReadDescriptorRequest) GetHandle() uint32 { +func (x *ListEntitiesTextResponse) GetKey() uint32 { if x != nil { - return x.Handle + return x.Key } return 0 } -type BluetoothGATTWriteDescriptorRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` - Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` +func (x *ListEntitiesTextResponse) GetName() string { + if x != nil { + return x.Name + } + return "" } -func (x *BluetoothGATTWriteDescriptorRequest) Reset() { - *x = BluetoothGATTWriteDescriptorRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[82] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ListEntitiesTextResponse) GetIcon() string { + if x != nil { + return x.Icon } + return "" } -func (x *BluetoothGATTWriteDescriptorRequest) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *ListEntitiesTextResponse) GetDisabledByDefault() bool { + if x != nil { + return x.DisabledByDefault + } + return false } -func (*BluetoothGATTWriteDescriptorRequest) ProtoMessage() {} - -func (x *BluetoothGATTWriteDescriptorRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[82] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ListEntitiesTextResponse) GetEntityCategory() EntityCategory { + if x != nil { + return x.EntityCategory } - return mi.MessageOf(x) + return EntityCategory_ENTITY_CATEGORY_NONE } -// Deprecated: Use BluetoothGATTWriteDescriptorRequest.ProtoReflect.Descriptor instead. -func (*BluetoothGATTWriteDescriptorRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{82} +func (x *ListEntitiesTextResponse) GetMinLength() uint32 { + if x != nil { + return x.MinLength + } + return 0 } -func (x *BluetoothGATTWriteDescriptorRequest) GetAddress() uint64 { +func (x *ListEntitiesTextResponse) GetMaxLength() uint32 { if x != nil { - return x.Address + return x.MaxLength } return 0 } -func (x *BluetoothGATTWriteDescriptorRequest) GetHandle() uint32 { +func (x *ListEntitiesTextResponse) GetPattern() string { if x != nil { - return x.Handle + return x.Pattern } - return 0 + return "" } -func (x *BluetoothGATTWriteDescriptorRequest) GetData() []byte { +func (x *ListEntitiesTextResponse) GetMode() TextMode { if x != nil { - return x.Data + return x.Mode } - return nil + return TextMode_TEXT_MODE_TEXT } -type BluetoothGATTNotifyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesTextResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` - Enable bool `protobuf:"varint,3,opt,name=enable,proto3" json:"enable,omitempty"` +type TextStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + // If the Text does not have a valid state yet. + // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller + MissingState bool `protobuf:"varint,3,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` + DeviceId uint32 `protobuf:"varint,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BluetoothGATTNotifyRequest) Reset() { - *x = BluetoothGATTNotifyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[83] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *TextStateResponse) Reset() { + *x = TextStateResponse{} + mi := &file_api_proto_msgTypes[131] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothGATTNotifyRequest) String() string { +func (x *TextStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTNotifyRequest) ProtoMessage() {} +func (*TextStateResponse) ProtoMessage() {} -func (x *BluetoothGATTNotifyRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[83] - if protoimpl.UnsafeEnabled && x != nil { +func (x *TextStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[131] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8425,60 +12807,64 @@ func (x *BluetoothGATTNotifyRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTNotifyRequest.ProtoReflect.Descriptor instead. -func (*BluetoothGATTNotifyRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{83} +// Deprecated: Use TextStateResponse.ProtoReflect.Descriptor instead. +func (*TextStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{131} } -func (x *BluetoothGATTNotifyRequest) GetAddress() uint64 { +func (x *TextStateResponse) GetKey() uint32 { if x != nil { - return x.Address + return x.Key } return 0 } -func (x *BluetoothGATTNotifyRequest) GetHandle() uint32 { +func (x *TextStateResponse) GetState() string { if x != nil { - return x.Handle + return x.State } - return 0 + return "" } -func (x *BluetoothGATTNotifyRequest) GetEnable() bool { +func (x *TextStateResponse) GetMissingState() bool { if x != nil { - return x.Enable + return x.MissingState } return false } -type BluetoothGATTNotifyDataResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *TextStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` - Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` +type TextCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + DeviceId uint32 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BluetoothGATTNotifyDataResponse) Reset() { - *x = BluetoothGATTNotifyDataResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[84] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *TextCommandRequest) Reset() { + *x = TextCommandRequest{} + mi := &file_api_proto_msgTypes[132] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothGATTNotifyDataResponse) String() string { +func (x *TextCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTNotifyDataResponse) ProtoMessage() {} +func (*TextCommandRequest) ProtoMessage() {} -func (x *BluetoothGATTNotifyDataResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[84] - if protoimpl.UnsafeEnabled && x != nil { +func (x *TextCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[132] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8488,56 +12874,62 @@ func (x *BluetoothGATTNotifyDataResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTNotifyDataResponse.ProtoReflect.Descriptor instead. -func (*BluetoothGATTNotifyDataResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{84} +// Deprecated: Use TextCommandRequest.ProtoReflect.Descriptor instead. +func (*TextCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{132} } -func (x *BluetoothGATTNotifyDataResponse) GetAddress() uint64 { +func (x *TextCommandRequest) GetKey() uint32 { if x != nil { - return x.Address + return x.Key } return 0 } -func (x *BluetoothGATTNotifyDataResponse) GetHandle() uint32 { +func (x *TextCommandRequest) GetState() string { if x != nil { - return x.Handle + return x.State } - return 0 + return "" } -func (x *BluetoothGATTNotifyDataResponse) GetData() []byte { +func (x *TextCommandRequest) GetDeviceId() uint32 { if x != nil { - return x.Data + return x.DeviceId } - return nil + return 0 } -type SubscribeBluetoothConnectionsFreeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +// ==================== DATETIME DATE ==================== +type ListEntitiesDateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceId uint32 `protobuf:"varint,8,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *SubscribeBluetoothConnectionsFreeRequest) Reset() { - *x = SubscribeBluetoothConnectionsFreeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[85] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListEntitiesDateResponse) Reset() { + *x = ListEntitiesDateResponse{} + mi := &file_api_proto_msgTypes[133] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *SubscribeBluetoothConnectionsFreeRequest) String() string { +func (x *ListEntitiesDateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SubscribeBluetoothConnectionsFreeRequest) ProtoMessage() {} +func (*ListEntitiesDateResponse) ProtoMessage() {} -func (x *SubscribeBluetoothConnectionsFreeRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[85] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesDateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[133] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8547,94 +12939,90 @@ func (x *SubscribeBluetoothConnectionsFreeRequest) ProtoReflect() protoreflect.M return mi.MessageOf(x) } -// Deprecated: Use SubscribeBluetoothConnectionsFreeRequest.ProtoReflect.Descriptor instead. -func (*SubscribeBluetoothConnectionsFreeRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{85} +// Deprecated: Use ListEntitiesDateResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesDateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{133} } -type BluetoothConnectionsFreeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Free uint32 `protobuf:"varint,1,opt,name=free,proto3" json:"free,omitempty"` - Limit uint32 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` +func (x *ListEntitiesDateResponse) GetObjectId() string { + if x != nil { + return x.ObjectId + } + return "" } -func (x *BluetoothConnectionsFreeResponse) Reset() { - *x = BluetoothConnectionsFreeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[86] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ListEntitiesDateResponse) GetKey() uint32 { + if x != nil { + return x.Key } + return 0 } -func (x *BluetoothConnectionsFreeResponse) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *ListEntitiesDateResponse) GetName() string { + if x != nil { + return x.Name + } + return "" } -func (*BluetoothConnectionsFreeResponse) ProtoMessage() {} - -func (x *BluetoothConnectionsFreeResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[86] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ListEntitiesDateResponse) GetIcon() string { + if x != nil { + return x.Icon } - return mi.MessageOf(x) + return "" } -// Deprecated: Use BluetoothConnectionsFreeResponse.ProtoReflect.Descriptor instead. -func (*BluetoothConnectionsFreeResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{86} +func (x *ListEntitiesDateResponse) GetDisabledByDefault() bool { + if x != nil { + return x.DisabledByDefault + } + return false } -func (x *BluetoothConnectionsFreeResponse) GetFree() uint32 { +func (x *ListEntitiesDateResponse) GetEntityCategory() EntityCategory { if x != nil { - return x.Free + return x.EntityCategory } - return 0 + return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *BluetoothConnectionsFreeResponse) GetLimit() uint32 { +func (x *ListEntitiesDateResponse) GetDeviceId() uint32 { if x != nil { - return x.Limit + return x.DeviceId } return 0 } -type BluetoothGATTErrorResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type DateStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + // If the date does not have a valid state yet. + // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller + MissingState bool `protobuf:"varint,2,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` + Year uint32 `protobuf:"varint,3,opt,name=year,proto3" json:"year,omitempty"` + Month uint32 `protobuf:"varint,4,opt,name=month,proto3" json:"month,omitempty"` + Day uint32 `protobuf:"varint,5,opt,name=day,proto3" json:"day,omitempty"` + DeviceId uint32 `protobuf:"varint,6,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` - Error int32 `protobuf:"varint,3,opt,name=error,proto3" json:"error,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *BluetoothGATTErrorResponse) Reset() { - *x = BluetoothGATTErrorResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[87] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *DateStateResponse) Reset() { + *x = DateStateResponse{} + mi := &file_api_proto_msgTypes[134] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothGATTErrorResponse) String() string { +func (x *DateStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTErrorResponse) ProtoMessage() {} +func (*DateStateResponse) ProtoMessage() {} -func (x *BluetoothGATTErrorResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[87] - if protoimpl.UnsafeEnabled && x != nil { +func (x *DateStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[134] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8644,59 +13032,80 @@ func (x *BluetoothGATTErrorResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTErrorResponse.ProtoReflect.Descriptor instead. -func (*BluetoothGATTErrorResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{87} +// Deprecated: Use DateStateResponse.ProtoReflect.Descriptor instead. +func (*DateStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{134} } -func (x *BluetoothGATTErrorResponse) GetAddress() uint64 { +func (x *DateStateResponse) GetKey() uint32 { if x != nil { - return x.Address + return x.Key } return 0 } -func (x *BluetoothGATTErrorResponse) GetHandle() uint32 { +func (x *DateStateResponse) GetMissingState() bool { if x != nil { - return x.Handle + return x.MissingState } - return 0 + return false } -func (x *BluetoothGATTErrorResponse) GetError() int32 { +func (x *DateStateResponse) GetYear() uint32 { if x != nil { - return x.Error + return x.Year } return 0 } -type BluetoothGATTWriteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *DateStateResponse) GetMonth() uint32 { + if x != nil { + return x.Month + } + return 0 +} - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` +func (x *DateStateResponse) GetDay() uint32 { + if x != nil { + return x.Day + } + return 0 } -func (x *BluetoothGATTWriteResponse) Reset() { - *x = BluetoothGATTWriteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[88] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *DateStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId } + return 0 } -func (x *BluetoothGATTWriteResponse) String() string { +type DateCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + Year uint32 `protobuf:"varint,2,opt,name=year,proto3" json:"year,omitempty"` + Month uint32 `protobuf:"varint,3,opt,name=month,proto3" json:"month,omitempty"` + Day uint32 `protobuf:"varint,4,opt,name=day,proto3" json:"day,omitempty"` + DeviceId uint32 `protobuf:"varint,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DateCommandRequest) Reset() { + *x = DateCommandRequest{} + mi := &file_api_proto_msgTypes[135] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DateCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTWriteResponse) ProtoMessage() {} +func (*DateCommandRequest) ProtoMessage() {} -func (x *BluetoothGATTWriteResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[88] - if protoimpl.UnsafeEnabled && x != nil { +func (x *DateCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[135] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8706,52 +13115,76 @@ func (x *BluetoothGATTWriteResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTWriteResponse.ProtoReflect.Descriptor instead. -func (*BluetoothGATTWriteResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{88} +// Deprecated: Use DateCommandRequest.ProtoReflect.Descriptor instead. +func (*DateCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{135} } -func (x *BluetoothGATTWriteResponse) GetAddress() uint64 { +func (x *DateCommandRequest) GetKey() uint32 { if x != nil { - return x.Address + return x.Key } return 0 } -func (x *BluetoothGATTWriteResponse) GetHandle() uint32 { +func (x *DateCommandRequest) GetYear() uint32 { if x != nil { - return x.Handle + return x.Year } return 0 } -type BluetoothGATTNotifyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *DateCommandRequest) GetMonth() uint32 { + if x != nil { + return x.Month + } + return 0 +} - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Handle uint32 `protobuf:"varint,2,opt,name=handle,proto3" json:"handle,omitempty"` +func (x *DateCommandRequest) GetDay() uint32 { + if x != nil { + return x.Day + } + return 0 } -func (x *BluetoothGATTNotifyResponse) Reset() { - *x = BluetoothGATTNotifyResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[89] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *DateCommandRequest) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId } + return 0 } -func (x *BluetoothGATTNotifyResponse) String() string { +// ==================== DATETIME TIME ==================== +type ListEntitiesTimeResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceId uint32 `protobuf:"varint,8,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListEntitiesTimeResponse) Reset() { + *x = ListEntitiesTimeResponse{} + mi := &file_api_proto_msgTypes[136] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListEntitiesTimeResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothGATTNotifyResponse) ProtoMessage() {} +func (*ListEntitiesTimeResponse) ProtoMessage() {} -func (x *BluetoothGATTNotifyResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[89] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesTimeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[136] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8761,116 +13194,90 @@ func (x *BluetoothGATTNotifyResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothGATTNotifyResponse.ProtoReflect.Descriptor instead. -func (*BluetoothGATTNotifyResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{89} +// Deprecated: Use ListEntitiesTimeResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesTimeResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{136} } -func (x *BluetoothGATTNotifyResponse) GetAddress() uint64 { +func (x *ListEntitiesTimeResponse) GetObjectId() string { if x != nil { - return x.Address + return x.ObjectId } - return 0 + return "" } -func (x *BluetoothGATTNotifyResponse) GetHandle() uint32 { +func (x *ListEntitiesTimeResponse) GetKey() uint32 { if x != nil { - return x.Handle + return x.Key } return 0 } -type BluetoothDevicePairingResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Paired bool `protobuf:"varint,2,opt,name=paired,proto3" json:"paired,omitempty"` - Error int32 `protobuf:"varint,3,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *BluetoothDevicePairingResponse) Reset() { - *x = BluetoothDevicePairingResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[90] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ListEntitiesTimeResponse) GetName() string { + if x != nil { + return x.Name } + return "" } -func (x *BluetoothDevicePairingResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BluetoothDevicePairingResponse) ProtoMessage() {} - -func (x *BluetoothDevicePairingResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[90] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ListEntitiesTimeResponse) GetIcon() string { + if x != nil { + return x.Icon } - return mi.MessageOf(x) -} - -// Deprecated: Use BluetoothDevicePairingResponse.ProtoReflect.Descriptor instead. -func (*BluetoothDevicePairingResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{90} + return "" } -func (x *BluetoothDevicePairingResponse) GetAddress() uint64 { +func (x *ListEntitiesTimeResponse) GetDisabledByDefault() bool { if x != nil { - return x.Address + return x.DisabledByDefault } - return 0 + return false } -func (x *BluetoothDevicePairingResponse) GetPaired() bool { +func (x *ListEntitiesTimeResponse) GetEntityCategory() EntityCategory { if x != nil { - return x.Paired + return x.EntityCategory } - return false + return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *BluetoothDevicePairingResponse) GetError() int32 { +func (x *ListEntitiesTimeResponse) GetDeviceId() uint32 { if x != nil { - return x.Error + return x.DeviceId } return 0 } -type BluetoothDeviceUnpairingResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type TimeStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + // If the time does not have a valid state yet. + // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller + MissingState bool `protobuf:"varint,2,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` + Hour uint32 `protobuf:"varint,3,opt,name=hour,proto3" json:"hour,omitempty"` + Minute uint32 `protobuf:"varint,4,opt,name=minute,proto3" json:"minute,omitempty"` + Second uint32 `protobuf:"varint,5,opt,name=second,proto3" json:"second,omitempty"` + DeviceId uint32 `protobuf:"varint,6,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"` - Error int32 `protobuf:"varint,3,opt,name=error,proto3" json:"error,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *BluetoothDeviceUnpairingResponse) Reset() { - *x = BluetoothDeviceUnpairingResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[91] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *TimeStateResponse) Reset() { + *x = TimeStateResponse{} + mi := &file_api_proto_msgTypes[137] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothDeviceUnpairingResponse) String() string { +func (x *TimeStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothDeviceUnpairingResponse) ProtoMessage() {} +func (*TimeStateResponse) ProtoMessage() {} -func (x *BluetoothDeviceUnpairingResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[91] - if protoimpl.UnsafeEnabled && x != nil { +func (x *TimeStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[137] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8880,98 +13287,80 @@ func (x *BluetoothDeviceUnpairingResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BluetoothDeviceUnpairingResponse.ProtoReflect.Descriptor instead. -func (*BluetoothDeviceUnpairingResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{91} +// Deprecated: Use TimeStateResponse.ProtoReflect.Descriptor instead. +func (*TimeStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{137} } -func (x *BluetoothDeviceUnpairingResponse) GetAddress() uint64 { +func (x *TimeStateResponse) GetKey() uint32 { if x != nil { - return x.Address + return x.Key } return 0 } -func (x *BluetoothDeviceUnpairingResponse) GetSuccess() bool { +func (x *TimeStateResponse) GetMissingState() bool { if x != nil { - return x.Success + return x.MissingState } return false } -func (x *BluetoothDeviceUnpairingResponse) GetError() int32 { +func (x *TimeStateResponse) GetHour() uint32 { if x != nil { - return x.Error + return x.Hour } return 0 } -type UnsubscribeBluetoothLEAdvertisementsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *UnsubscribeBluetoothLEAdvertisementsRequest) Reset() { - *x = UnsubscribeBluetoothLEAdvertisementsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[92] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *TimeStateResponse) GetMinute() uint32 { + if x != nil { + return x.Minute } -} - -func (x *UnsubscribeBluetoothLEAdvertisementsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UnsubscribeBluetoothLEAdvertisementsRequest) ProtoMessage() {} - -func (x *UnsubscribeBluetoothLEAdvertisementsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[92] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms + return 0 +} + +func (x *TimeStateResponse) GetSecond() uint32 { + if x != nil { + return x.Second } - return mi.MessageOf(x) + return 0 } -// Deprecated: Use UnsubscribeBluetoothLEAdvertisementsRequest.ProtoReflect.Descriptor instead. -func (*UnsubscribeBluetoothLEAdvertisementsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{92} +func (x *TimeStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 } -type BluetoothDeviceClearCacheResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type TimeCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + Hour uint32 `protobuf:"varint,2,opt,name=hour,proto3" json:"hour,omitempty"` + Minute uint32 `protobuf:"varint,3,opt,name=minute,proto3" json:"minute,omitempty"` + Second uint32 `protobuf:"varint,4,opt,name=second,proto3" json:"second,omitempty"` + DeviceId uint32 `protobuf:"varint,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` - Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"` - Error int32 `protobuf:"varint,3,opt,name=error,proto3" json:"error,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *BluetoothDeviceClearCacheResponse) Reset() { - *x = BluetoothDeviceClearCacheResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[93] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *TimeCommandRequest) Reset() { + *x = TimeCommandRequest{} + mi := &file_api_proto_msgTypes[138] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BluetoothDeviceClearCacheResponse) String() string { +func (x *TimeCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BluetoothDeviceClearCacheResponse) ProtoMessage() {} +func (*TimeCommandRequest) ProtoMessage() {} -func (x *BluetoothDeviceClearCacheResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[93] - if protoimpl.UnsafeEnabled && x != nil { +func (x *TimeCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[138] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8981,59 +13370,78 @@ func (x *BluetoothDeviceClearCacheResponse) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use BluetoothDeviceClearCacheResponse.ProtoReflect.Descriptor instead. -func (*BluetoothDeviceClearCacheResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{93} +// Deprecated: Use TimeCommandRequest.ProtoReflect.Descriptor instead. +func (*TimeCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{138} } -func (x *BluetoothDeviceClearCacheResponse) GetAddress() uint64 { +func (x *TimeCommandRequest) GetKey() uint32 { if x != nil { - return x.Address + return x.Key } return 0 } -func (x *BluetoothDeviceClearCacheResponse) GetSuccess() bool { +func (x *TimeCommandRequest) GetHour() uint32 { if x != nil { - return x.Success + return x.Hour } - return false + return 0 } -func (x *BluetoothDeviceClearCacheResponse) GetError() int32 { +func (x *TimeCommandRequest) GetMinute() uint32 { if x != nil { - return x.Error + return x.Minute } return 0 } -type SubscribeVoiceAssistantRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Subscribe bool `protobuf:"varint,1,opt,name=subscribe,proto3" json:"subscribe,omitempty"` - Flags uint32 `protobuf:"varint,2,opt,name=flags,proto3" json:"flags,omitempty"` +func (x *TimeCommandRequest) GetSecond() uint32 { + if x != nil { + return x.Second + } + return 0 } -func (x *SubscribeVoiceAssistantRequest) Reset() { - *x = SubscribeVoiceAssistantRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[94] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *TimeCommandRequest) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId } + return 0 } -func (x *SubscribeVoiceAssistantRequest) String() string { +// ==================== EVENT ==================== +type ListEntitiesEventResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceClass string `protobuf:"bytes,8,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + EventTypes []string `protobuf:"bytes,9,rep,name=event_types,json=eventTypes,proto3" json:"event_types,omitempty"` + DeviceId uint32 `protobuf:"varint,10,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListEntitiesEventResponse) Reset() { + *x = ListEntitiesEventResponse{} + mi := &file_api_proto_msgTypes[139] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListEntitiesEventResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SubscribeVoiceAssistantRequest) ProtoMessage() {} +func (*ListEntitiesEventResponse) ProtoMessage() {} -func (x *SubscribeVoiceAssistantRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[94] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesEventResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[139] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9043,118 +13451,99 @@ func (x *SubscribeVoiceAssistantRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SubscribeVoiceAssistantRequest.ProtoReflect.Descriptor instead. -func (*SubscribeVoiceAssistantRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{94} +// Deprecated: Use ListEntitiesEventResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesEventResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{139} } -func (x *SubscribeVoiceAssistantRequest) GetSubscribe() bool { +func (x *ListEntitiesEventResponse) GetObjectId() string { if x != nil { - return x.Subscribe + return x.ObjectId } - return false + return "" } -func (x *SubscribeVoiceAssistantRequest) GetFlags() uint32 { +func (x *ListEntitiesEventResponse) GetKey() uint32 { if x != nil { - return x.Flags + return x.Key } return 0 } -type VoiceAssistantAudioSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - NoiseSuppressionLevel uint32 `protobuf:"varint,1,opt,name=noise_suppression_level,json=noiseSuppressionLevel,proto3" json:"noise_suppression_level,omitempty"` - AutoGain uint32 `protobuf:"varint,2,opt,name=auto_gain,json=autoGain,proto3" json:"auto_gain,omitempty"` - VolumeMultiplier float32 `protobuf:"fixed32,3,opt,name=volume_multiplier,json=volumeMultiplier,proto3" json:"volume_multiplier,omitempty"` -} - -func (x *VoiceAssistantAudioSettings) Reset() { - *x = VoiceAssistantAudioSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[95] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ListEntitiesEventResponse) GetName() string { + if x != nil { + return x.Name } + return "" } -func (x *VoiceAssistantAudioSettings) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *ListEntitiesEventResponse) GetIcon() string { + if x != nil { + return x.Icon + } + return "" } -func (*VoiceAssistantAudioSettings) ProtoMessage() {} - -func (x *VoiceAssistantAudioSettings) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[95] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ListEntitiesEventResponse) GetDisabledByDefault() bool { + if x != nil { + return x.DisabledByDefault } - return mi.MessageOf(x) + return false } -// Deprecated: Use VoiceAssistantAudioSettings.ProtoReflect.Descriptor instead. -func (*VoiceAssistantAudioSettings) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{95} +func (x *ListEntitiesEventResponse) GetEntityCategory() EntityCategory { + if x != nil { + return x.EntityCategory + } + return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *VoiceAssistantAudioSettings) GetNoiseSuppressionLevel() uint32 { +func (x *ListEntitiesEventResponse) GetDeviceClass() string { if x != nil { - return x.NoiseSuppressionLevel + return x.DeviceClass } - return 0 + return "" } -func (x *VoiceAssistantAudioSettings) GetAutoGain() uint32 { +func (x *ListEntitiesEventResponse) GetEventTypes() []string { if x != nil { - return x.AutoGain + return x.EventTypes } - return 0 + return nil } -func (x *VoiceAssistantAudioSettings) GetVolumeMultiplier() float32 { +func (x *ListEntitiesEventResponse) GetDeviceId() uint32 { if x != nil { - return x.VolumeMultiplier + return x.DeviceId } return 0 } -type VoiceAssistantRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type EventResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + EventType string `protobuf:"bytes,2,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` + DeviceId uint32 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Start bool `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"` - ConversationId string `protobuf:"bytes,2,opt,name=conversation_id,json=conversationId,proto3" json:"conversation_id,omitempty"` - Flags uint32 `protobuf:"varint,3,opt,name=flags,proto3" json:"flags,omitempty"` - AudioSettings *VoiceAssistantAudioSettings `protobuf:"bytes,4,opt,name=audio_settings,json=audioSettings,proto3" json:"audio_settings,omitempty"` - WakeWordPhrase string `protobuf:"bytes,5,opt,name=wake_word_phrase,json=wakeWordPhrase,proto3" json:"wake_word_phrase,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *VoiceAssistantRequest) Reset() { - *x = VoiceAssistantRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[96] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *EventResponse) Reset() { + *x = EventResponse{} + mi := &file_api_proto_msgTypes[140] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *VoiceAssistantRequest) String() string { +func (x *EventResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VoiceAssistantRequest) ProtoMessage() {} +func (*EventResponse) ProtoMessage() {} -func (x *VoiceAssistantRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[96] - if protoimpl.UnsafeEnabled && x != nil { +func (x *EventResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[140] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9164,73 +13553,66 @@ func (x *VoiceAssistantRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VoiceAssistantRequest.ProtoReflect.Descriptor instead. -func (*VoiceAssistantRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{96} +// Deprecated: Use EventResponse.ProtoReflect.Descriptor instead. +func (*EventResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{140} } -func (x *VoiceAssistantRequest) GetStart() bool { +func (x *EventResponse) GetKey() uint32 { if x != nil { - return x.Start + return x.Key } - return false + return 0 } -func (x *VoiceAssistantRequest) GetConversationId() string { +func (x *EventResponse) GetEventType() string { if x != nil { - return x.ConversationId + return x.EventType } return "" } -func (x *VoiceAssistantRequest) GetFlags() uint32 { +func (x *EventResponse) GetDeviceId() uint32 { if x != nil { - return x.Flags + return x.DeviceId } return 0 } -func (x *VoiceAssistantRequest) GetAudioSettings() *VoiceAssistantAudioSettings { - if x != nil { - return x.AudioSettings - } - return nil -} - -func (x *VoiceAssistantRequest) GetWakeWordPhrase() string { - if x != nil { - return x.WakeWordPhrase - } - return "" -} - -type VoiceAssistantResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Port uint32 `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"` - Error bool `protobuf:"varint,2,opt,name=error,proto3" json:"error,omitempty"` +// ==================== VALVE ==================== +type ListEntitiesValveResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceClass string `protobuf:"bytes,8,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + AssumedState bool `protobuf:"varint,9,opt,name=assumed_state,json=assumedState,proto3" json:"assumed_state,omitempty"` + SupportsPosition bool `protobuf:"varint,10,opt,name=supports_position,json=supportsPosition,proto3" json:"supports_position,omitempty"` + SupportsStop bool `protobuf:"varint,11,opt,name=supports_stop,json=supportsStop,proto3" json:"supports_stop,omitempty"` + DeviceId uint32 `protobuf:"varint,12,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *VoiceAssistantResponse) Reset() { - *x = VoiceAssistantResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[97] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListEntitiesValveResponse) Reset() { + *x = ListEntitiesValveResponse{} + mi := &file_api_proto_msgTypes[141] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *VoiceAssistantResponse) String() string { +func (x *ListEntitiesValveResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VoiceAssistantResponse) ProtoMessage() {} +func (*ListEntitiesValveResponse) ProtoMessage() {} -func (x *VoiceAssistantResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[97] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesValveResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[141] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9240,107 +13622,114 @@ func (x *VoiceAssistantResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VoiceAssistantResponse.ProtoReflect.Descriptor instead. -func (*VoiceAssistantResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{97} +// Deprecated: Use ListEntitiesValveResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesValveResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{141} } -func (x *VoiceAssistantResponse) GetPort() uint32 { +func (x *ListEntitiesValveResponse) GetObjectId() string { if x != nil { - return x.Port + return x.ObjectId + } + return "" +} + +func (x *ListEntitiesValveResponse) GetKey() uint32 { + if x != nil { + return x.Key } return 0 } -func (x *VoiceAssistantResponse) GetError() bool { +func (x *ListEntitiesValveResponse) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ListEntitiesValveResponse) GetIcon() string { + if x != nil { + return x.Icon + } + return "" +} + +func (x *ListEntitiesValveResponse) GetDisabledByDefault() bool { if x != nil { - return x.Error + return x.DisabledByDefault } return false } -type VoiceAssistantEventData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *VoiceAssistantEventData) Reset() { - *x = VoiceAssistantEventData{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[98] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ListEntitiesValveResponse) GetEntityCategory() EntityCategory { + if x != nil { + return x.EntityCategory } + return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *VoiceAssistantEventData) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *ListEntitiesValveResponse) GetDeviceClass() string { + if x != nil { + return x.DeviceClass + } + return "" } -func (*VoiceAssistantEventData) ProtoMessage() {} - -func (x *VoiceAssistantEventData) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[98] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ListEntitiesValveResponse) GetAssumedState() bool { + if x != nil { + return x.AssumedState } - return mi.MessageOf(x) + return false } -// Deprecated: Use VoiceAssistantEventData.ProtoReflect.Descriptor instead. -func (*VoiceAssistantEventData) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{98} +func (x *ListEntitiesValveResponse) GetSupportsPosition() bool { + if x != nil { + return x.SupportsPosition + } + return false } -func (x *VoiceAssistantEventData) GetName() string { +func (x *ListEntitiesValveResponse) GetSupportsStop() bool { if x != nil { - return x.Name + return x.SupportsStop } - return "" + return false } -func (x *VoiceAssistantEventData) GetValue() string { +func (x *ListEntitiesValveResponse) GetDeviceId() uint32 { if x != nil { - return x.Value + return x.DeviceId } - return "" + return 0 } -type VoiceAssistantEventResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventType VoiceAssistantEvent `protobuf:"varint,1,opt,name=event_type,json=eventType,proto3,enum=VoiceAssistantEvent" json:"event_type,omitempty"` - Data []*VoiceAssistantEventData `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"` +type ValveStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + Position float32 `protobuf:"fixed32,2,opt,name=position,proto3" json:"position,omitempty"` + CurrentOperation ValveOperation `protobuf:"varint,3,opt,name=current_operation,json=currentOperation,proto3,enum=ValveOperation" json:"current_operation,omitempty"` + DeviceId uint32 `protobuf:"varint,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *VoiceAssistantEventResponse) Reset() { - *x = VoiceAssistantEventResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[99] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ValveStateResponse) Reset() { + *x = ValveStateResponse{} + mi := &file_api_proto_msgTypes[142] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *VoiceAssistantEventResponse) String() string { +func (x *ValveStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VoiceAssistantEventResponse) ProtoMessage() {} +func (*ValveStateResponse) ProtoMessage() {} -func (x *VoiceAssistantEventResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[99] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ValveStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[142] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9350,52 +13739,66 @@ func (x *VoiceAssistantEventResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VoiceAssistantEventResponse.ProtoReflect.Descriptor instead. -func (*VoiceAssistantEventResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{99} +// Deprecated: Use ValveStateResponse.ProtoReflect.Descriptor instead. +func (*ValveStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{142} } -func (x *VoiceAssistantEventResponse) GetEventType() VoiceAssistantEvent { +func (x *ValveStateResponse) GetKey() uint32 { if x != nil { - return x.EventType + return x.Key } - return VoiceAssistantEvent_VOICE_ASSISTANT_ERROR + return 0 } -func (x *VoiceAssistantEventResponse) GetData() []*VoiceAssistantEventData { +func (x *ValveStateResponse) GetPosition() float32 { if x != nil { - return x.Data + return x.Position } - return nil + return 0 } -type VoiceAssistantAudio struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - End bool `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"` +func (x *ValveStateResponse) GetCurrentOperation() ValveOperation { + if x != nil { + return x.CurrentOperation + } + return ValveOperation_VALVE_OPERATION_IDLE } -func (x *VoiceAssistantAudio) Reset() { - *x = VoiceAssistantAudio{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[100] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ValveStateResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId } + return 0 } -func (x *VoiceAssistantAudio) String() string { +type ValveCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + HasPosition bool `protobuf:"varint,2,opt,name=has_position,json=hasPosition,proto3" json:"has_position,omitempty"` + Position float32 `protobuf:"fixed32,3,opt,name=position,proto3" json:"position,omitempty"` + Stop bool `protobuf:"varint,4,opt,name=stop,proto3" json:"stop,omitempty"` + DeviceId uint32 `protobuf:"varint,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ValveCommandRequest) Reset() { + *x = ValveCommandRequest{} + mi := &file_api_proto_msgTypes[143] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValveCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VoiceAssistantAudio) ProtoMessage() {} +func (*ValveCommandRequest) ProtoMessage() {} -func (x *VoiceAssistantAudio) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[100] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ValveCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[143] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9405,60 +13808,76 @@ func (x *VoiceAssistantAudio) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VoiceAssistantAudio.ProtoReflect.Descriptor instead. -func (*VoiceAssistantAudio) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{100} +// Deprecated: Use ValveCommandRequest.ProtoReflect.Descriptor instead. +func (*ValveCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{143} } -func (x *VoiceAssistantAudio) GetData() []byte { +func (x *ValveCommandRequest) GetKey() uint32 { if x != nil { - return x.Data + return x.Key } - return nil + return 0 } -func (x *VoiceAssistantAudio) GetEnd() bool { +func (x *ValveCommandRequest) GetHasPosition() bool { if x != nil { - return x.End + return x.HasPosition } return false } -type ListEntitiesAlarmControlPanelResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ValveCommandRequest) GetPosition() float32 { + if x != nil { + return x.Position + } + return 0 +} - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` - SupportedFeatures uint32 `protobuf:"varint,8,opt,name=supported_features,json=supportedFeatures,proto3" json:"supported_features,omitempty"` - RequiresCode bool `protobuf:"varint,9,opt,name=requires_code,json=requiresCode,proto3" json:"requires_code,omitempty"` - RequiresCodeToArm bool `protobuf:"varint,10,opt,name=requires_code_to_arm,json=requiresCodeToArm,proto3" json:"requires_code_to_arm,omitempty"` +func (x *ValveCommandRequest) GetStop() bool { + if x != nil { + return x.Stop + } + return false } -func (x *ListEntitiesAlarmControlPanelResponse) Reset() { - *x = ListEntitiesAlarmControlPanelResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[101] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ValveCommandRequest) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId } + return 0 } -func (x *ListEntitiesAlarmControlPanelResponse) String() string { +// ==================== DATETIME DATETIME ==================== +type ListEntitiesDateTimeResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceId uint32 `protobuf:"varint,8,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListEntitiesDateTimeResponse) Reset() { + *x = ListEntitiesDateTimeResponse{} + mi := &file_api_proto_msgTypes[144] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListEntitiesDateTimeResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListEntitiesAlarmControlPanelResponse) ProtoMessage() {} +func (*ListEntitiesDateTimeResponse) ProtoMessage() {} -func (x *ListEntitiesAlarmControlPanelResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[101] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesDateTimeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[144] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9468,108 +13887,88 @@ func (x *ListEntitiesAlarmControlPanelResponse) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ListEntitiesAlarmControlPanelResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesAlarmControlPanelResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{101} +// Deprecated: Use ListEntitiesDateTimeResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesDateTimeResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{144} } -func (x *ListEntitiesAlarmControlPanelResponse) GetObjectId() string { +func (x *ListEntitiesDateTimeResponse) GetObjectId() string { if x != nil { return x.ObjectId } return "" } -func (x *ListEntitiesAlarmControlPanelResponse) GetKey() uint32 { +func (x *ListEntitiesDateTimeResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *ListEntitiesAlarmControlPanelResponse) GetName() string { +func (x *ListEntitiesDateTimeResponse) GetName() string { if x != nil { return x.Name } return "" } -func (x *ListEntitiesAlarmControlPanelResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" -} - -func (x *ListEntitiesAlarmControlPanelResponse) GetIcon() string { +func (x *ListEntitiesDateTimeResponse) GetIcon() string { if x != nil { return x.Icon } return "" } -func (x *ListEntitiesAlarmControlPanelResponse) GetDisabledByDefault() bool { +func (x *ListEntitiesDateTimeResponse) GetDisabledByDefault() bool { if x != nil { return x.DisabledByDefault } return false } -func (x *ListEntitiesAlarmControlPanelResponse) GetEntityCategory() EntityCategory { +func (x *ListEntitiesDateTimeResponse) GetEntityCategory() EntityCategory { if x != nil { return x.EntityCategory } return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *ListEntitiesAlarmControlPanelResponse) GetSupportedFeatures() uint32 { +func (x *ListEntitiesDateTimeResponse) GetDeviceId() uint32 { if x != nil { - return x.SupportedFeatures + return x.DeviceId } return 0 } -func (x *ListEntitiesAlarmControlPanelResponse) GetRequiresCode() bool { - if x != nil { - return x.RequiresCode - } - return false -} - -func (x *ListEntitiesAlarmControlPanelResponse) GetRequiresCodeToArm() bool { - if x != nil { - return x.RequiresCodeToArm - } - return false -} - -type AlarmControlPanelStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - +type DateTimeStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State AlarmControlPanelState `protobuf:"varint,2,opt,name=state,proto3,enum=AlarmControlPanelState" json:"state,omitempty"` + // If the datetime does not have a valid state yet. + // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller + MissingState bool `protobuf:"varint,2,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` + EpochSeconds uint32 `protobuf:"fixed32,3,opt,name=epoch_seconds,json=epochSeconds,proto3" json:"epoch_seconds,omitempty"` + DeviceId uint32 `protobuf:"varint,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AlarmControlPanelStateResponse) Reset() { - *x = AlarmControlPanelStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[102] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *DateTimeStateResponse) Reset() { + *x = DateTimeStateResponse{} + mi := &file_api_proto_msgTypes[145] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *AlarmControlPanelStateResponse) String() string { +func (x *DateTimeStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AlarmControlPanelStateResponse) ProtoMessage() {} +func (*DateTimeStateResponse) ProtoMessage() {} -func (x *AlarmControlPanelStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[102] - if protoimpl.UnsafeEnabled && x != nil { +func (x *DateTimeStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[145] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9579,53 +13978,64 @@ func (x *AlarmControlPanelStateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AlarmControlPanelStateResponse.ProtoReflect.Descriptor instead. -func (*AlarmControlPanelStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{102} +// Deprecated: Use DateTimeStateResponse.ProtoReflect.Descriptor instead. +func (*DateTimeStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{145} } -func (x *AlarmControlPanelStateResponse) GetKey() uint32 { +func (x *DateTimeStateResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *AlarmControlPanelStateResponse) GetState() AlarmControlPanelState { +func (x *DateTimeStateResponse) GetMissingState() bool { + if x != nil { + return x.MissingState + } + return false +} + +func (x *DateTimeStateResponse) GetEpochSeconds() uint32 { + if x != nil { + return x.EpochSeconds + } + return 0 +} + +func (x *DateTimeStateResponse) GetDeviceId() uint32 { if x != nil { - return x.State + return x.DeviceId } - return AlarmControlPanelState_ALARM_STATE_DISARMED + return 0 } -type AlarmControlPanelCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type DateTimeCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + EpochSeconds uint32 `protobuf:"fixed32,2,opt,name=epoch_seconds,json=epochSeconds,proto3" json:"epoch_seconds,omitempty"` + DeviceId uint32 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - Command AlarmControlPanelStateCommand `protobuf:"varint,2,opt,name=command,proto3,enum=AlarmControlPanelStateCommand" json:"command,omitempty"` - Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *AlarmControlPanelCommandRequest) Reset() { - *x = AlarmControlPanelCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[103] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *DateTimeCommandRequest) Reset() { + *x = DateTimeCommandRequest{} + mi := &file_api_proto_msgTypes[146] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *AlarmControlPanelCommandRequest) String() string { +func (x *DateTimeCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AlarmControlPanelCommandRequest) ProtoMessage() {} +func (*DateTimeCommandRequest) ProtoMessage() {} -func (x *AlarmControlPanelCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[103] - if protoimpl.UnsafeEnabled && x != nil { +func (x *DateTimeCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[146] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9635,68 +14045,63 @@ func (x *AlarmControlPanelCommandRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AlarmControlPanelCommandRequest.ProtoReflect.Descriptor instead. -func (*AlarmControlPanelCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{103} +// Deprecated: Use DateTimeCommandRequest.ProtoReflect.Descriptor instead. +func (*DateTimeCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{146} } -func (x *AlarmControlPanelCommandRequest) GetKey() uint32 { +func (x *DateTimeCommandRequest) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *AlarmControlPanelCommandRequest) GetCommand() AlarmControlPanelStateCommand { +func (x *DateTimeCommandRequest) GetEpochSeconds() uint32 { if x != nil { - return x.Command + return x.EpochSeconds } - return AlarmControlPanelStateCommand_ALARM_CONTROL_PANEL_DISARM + return 0 } -func (x *AlarmControlPanelCommandRequest) GetCode() string { +func (x *DateTimeCommandRequest) GetDeviceId() uint32 { if x != nil { - return x.Code + return x.DeviceId } - return "" + return 0 } -type ListEntitiesTextResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` - MinLength uint32 `protobuf:"varint,8,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - MaxLength uint32 `protobuf:"varint,9,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` - Pattern string `protobuf:"bytes,10,opt,name=pattern,proto3" json:"pattern,omitempty"` - Mode TextMode `protobuf:"varint,11,opt,name=mode,proto3,enum=TextMode" json:"mode,omitempty"` +// ==================== UPDATE ==================== +type ListEntitiesUpdateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceClass string `protobuf:"bytes,8,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` + DeviceId uint32 `protobuf:"varint,9,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ListEntitiesTextResponse) Reset() { - *x = ListEntitiesTextResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[104] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListEntitiesUpdateResponse) Reset() { + *x = ListEntitiesUpdateResponse{} + mi := &file_api_proto_msgTypes[147] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListEntitiesTextResponse) String() string { +func (x *ListEntitiesUpdateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListEntitiesTextResponse) ProtoMessage() {} +func (*ListEntitiesUpdateResponse) ProtoMessage() {} -func (x *ListEntitiesTextResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[104] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesUpdateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[147] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9706,118 +14111,100 @@ func (x *ListEntitiesTextResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListEntitiesTextResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesTextResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{104} +// Deprecated: Use ListEntitiesUpdateResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesUpdateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{147} } -func (x *ListEntitiesTextResponse) GetObjectId() string { +func (x *ListEntitiesUpdateResponse) GetObjectId() string { if x != nil { return x.ObjectId } return "" } -func (x *ListEntitiesTextResponse) GetKey() uint32 { +func (x *ListEntitiesUpdateResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *ListEntitiesTextResponse) GetName() string { +func (x *ListEntitiesUpdateResponse) GetName() string { if x != nil { return x.Name } return "" } -func (x *ListEntitiesTextResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" -} - -func (x *ListEntitiesTextResponse) GetIcon() string { +func (x *ListEntitiesUpdateResponse) GetIcon() string { if x != nil { return x.Icon } return "" } -func (x *ListEntitiesTextResponse) GetDisabledByDefault() bool { +func (x *ListEntitiesUpdateResponse) GetDisabledByDefault() bool { if x != nil { return x.DisabledByDefault } return false } -func (x *ListEntitiesTextResponse) GetEntityCategory() EntityCategory { +func (x *ListEntitiesUpdateResponse) GetEntityCategory() EntityCategory { if x != nil { return x.EntityCategory } return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *ListEntitiesTextResponse) GetMinLength() uint32 { - if x != nil { - return x.MinLength - } - return 0 -} - -func (x *ListEntitiesTextResponse) GetMaxLength() uint32 { - if x != nil { - return x.MaxLength - } - return 0 -} - -func (x *ListEntitiesTextResponse) GetPattern() string { +func (x *ListEntitiesUpdateResponse) GetDeviceClass() string { if x != nil { - return x.Pattern + return x.DeviceClass } return "" } -func (x *ListEntitiesTextResponse) GetMode() TextMode { +func (x *ListEntitiesUpdateResponse) GetDeviceId() uint32 { if x != nil { - return x.Mode + return x.DeviceId } - return TextMode_TEXT_MODE_TEXT + return 0 } -type TextStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` - // If the Text does not have a valid state yet. - // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller - MissingState bool `protobuf:"varint,3,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` +type UpdateStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + MissingState bool `protobuf:"varint,2,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` + InProgress bool `protobuf:"varint,3,opt,name=in_progress,json=inProgress,proto3" json:"in_progress,omitempty"` + HasProgress bool `protobuf:"varint,4,opt,name=has_progress,json=hasProgress,proto3" json:"has_progress,omitempty"` + Progress float32 `protobuf:"fixed32,5,opt,name=progress,proto3" json:"progress,omitempty"` + CurrentVersion string `protobuf:"bytes,6,opt,name=current_version,json=currentVersion,proto3" json:"current_version,omitempty"` + LatestVersion string `protobuf:"bytes,7,opt,name=latest_version,json=latestVersion,proto3" json:"latest_version,omitempty"` + Title string `protobuf:"bytes,8,opt,name=title,proto3" json:"title,omitempty"` + ReleaseSummary string `protobuf:"bytes,9,opt,name=release_summary,json=releaseSummary,proto3" json:"release_summary,omitempty"` + ReleaseUrl string `protobuf:"bytes,10,opt,name=release_url,json=releaseUrl,proto3" json:"release_url,omitempty"` + DeviceId uint32 `protobuf:"varint,11,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *TextStateResponse) Reset() { - *x = TextStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[105] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *UpdateStateResponse) Reset() { + *x = UpdateStateResponse{} + mi := &file_api_proto_msgTypes[148] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *TextStateResponse) String() string { +func (x *UpdateStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TextStateResponse) ProtoMessage() {} +func (*UpdateStateResponse) ProtoMessage() {} -func (x *TextStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[105] - if protoimpl.UnsafeEnabled && x != nil { +func (x *UpdateStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[148] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9827,215 +14214,113 @@ func (x *TextStateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TextStateResponse.ProtoReflect.Descriptor instead. -func (*TextStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{105} +// Deprecated: Use UpdateStateResponse.ProtoReflect.Descriptor instead. +func (*UpdateStateResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{148} } -func (x *TextStateResponse) GetKey() uint32 { +func (x *UpdateStateResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *TextStateResponse) GetState() string { - if x != nil { - return x.State - } - return "" -} - -func (x *TextStateResponse) GetMissingState() bool { +func (x *UpdateStateResponse) GetMissingState() bool { if x != nil { return x.MissingState } return false } -type TextCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` -} - -func (x *TextCommandRequest) Reset() { - *x = TextCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[106] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *UpdateStateResponse) GetInProgress() bool { + if x != nil { + return x.InProgress } + return false } -func (x *TextCommandRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TextCommandRequest) ProtoMessage() {} - -func (x *TextCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[106] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *UpdateStateResponse) GetHasProgress() bool { + if x != nil { + return x.HasProgress } - return mi.MessageOf(x) -} - -// Deprecated: Use TextCommandRequest.ProtoReflect.Descriptor instead. -func (*TextCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{106} + return false } -func (x *TextCommandRequest) GetKey() uint32 { +func (x *UpdateStateResponse) GetProgress() float32 { if x != nil { - return x.Key + return x.Progress } return 0 } -func (x *TextCommandRequest) GetState() string { +func (x *UpdateStateResponse) GetCurrentVersion() string { if x != nil { - return x.State + return x.CurrentVersion } return "" } -// ==================== DATETIME DATE ==================== -type ListEntitiesDateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` -} - -func (x *ListEntitiesDateResponse) Reset() { - *x = ListEntitiesDateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[107] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListEntitiesDateResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListEntitiesDateResponse) ProtoMessage() {} - -func (x *ListEntitiesDateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[107] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListEntitiesDateResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesDateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{107} -} - -func (x *ListEntitiesDateResponse) GetObjectId() string { +func (x *UpdateStateResponse) GetLatestVersion() string { if x != nil { - return x.ObjectId + return x.LatestVersion } return "" } -func (x *ListEntitiesDateResponse) GetKey() uint32 { - if x != nil { - return x.Key - } - return 0 -} - -func (x *ListEntitiesDateResponse) GetName() string { +func (x *UpdateStateResponse) GetTitle() string { if x != nil { - return x.Name + return x.Title } return "" } -func (x *ListEntitiesDateResponse) GetUniqueId() string { +func (x *UpdateStateResponse) GetReleaseSummary() string { if x != nil { - return x.UniqueId + return x.ReleaseSummary } return "" } -func (x *ListEntitiesDateResponse) GetIcon() string { +func (x *UpdateStateResponse) GetReleaseUrl() string { if x != nil { - return x.Icon + return x.ReleaseUrl } return "" } -func (x *ListEntitiesDateResponse) GetDisabledByDefault() bool { - if x != nil { - return x.DisabledByDefault - } - return false -} - -func (x *ListEntitiesDateResponse) GetEntityCategory() EntityCategory { +func (x *UpdateStateResponse) GetDeviceId() uint32 { if x != nil { - return x.EntityCategory + return x.DeviceId } - return EntityCategory_ENTITY_CATEGORY_NONE + return 0 } -type DateStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type UpdateCommandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` + Command UpdateCommand `protobuf:"varint,2,opt,name=command,proto3,enum=UpdateCommand" json:"command,omitempty"` + DeviceId uint32 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - // If the date does not have a valid state yet. - // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller - MissingState bool `protobuf:"varint,2,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` - Year uint32 `protobuf:"varint,3,opt,name=year,proto3" json:"year,omitempty"` - Month uint32 `protobuf:"varint,4,opt,name=month,proto3" json:"month,omitempty"` - Day uint32 `protobuf:"varint,5,opt,name=day,proto3" json:"day,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *DateStateResponse) Reset() { - *x = DateStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[108] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *UpdateCommandRequest) Reset() { + *x = UpdateCommandRequest{} + mi := &file_api_proto_msgTypes[149] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *DateStateResponse) String() string { +func (x *UpdateCommandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DateStateResponse) ProtoMessage() {} +func (*UpdateCommandRequest) ProtoMessage() {} -func (x *DateStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[108] - if protoimpl.UnsafeEnabled && x != nil { +func (x *UpdateCommandRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[149] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10045,75 +14330,100 @@ func (x *DateStateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DateStateResponse.ProtoReflect.Descriptor instead. -func (*DateStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{108} +// Deprecated: Use UpdateCommandRequest.ProtoReflect.Descriptor instead. +func (*UpdateCommandRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{149} } -func (x *DateStateResponse) GetKey() uint32 { +func (x *UpdateCommandRequest) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *DateStateResponse) GetMissingState() bool { +func (x *UpdateCommandRequest) GetCommand() UpdateCommand { if x != nil { - return x.MissingState + return x.Command } - return false + return UpdateCommand_UPDATE_COMMAND_NONE } -func (x *DateStateResponse) GetYear() uint32 { +func (x *UpdateCommandRequest) GetDeviceId() uint32 { if x != nil { - return x.Year + return x.DeviceId } return 0 } -func (x *DateStateResponse) GetMonth() uint32 { +type ZWaveProxyFrame struct { + state protoimpl.MessageState `protogen:"open.v1"` + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ZWaveProxyFrame) Reset() { + *x = ZWaveProxyFrame{} + mi := &file_api_proto_msgTypes[150] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ZWaveProxyFrame) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZWaveProxyFrame) ProtoMessage() {} + +func (x *ZWaveProxyFrame) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[150] if x != nil { - return x.Month + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) +} + +// Deprecated: Use ZWaveProxyFrame.ProtoReflect.Descriptor instead. +func (*ZWaveProxyFrame) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{150} } -func (x *DateStateResponse) GetDay() uint32 { +func (x *ZWaveProxyFrame) GetData() []byte { if x != nil { - return x.Day + return x.Data } - return 0 + return nil } -type DateCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ZWaveProxyRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type ZWaveProxyRequestType `protobuf:"varint,1,opt,name=type,proto3,enum=ZWaveProxyRequestType" json:"type,omitempty"` + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - Year uint32 `protobuf:"varint,2,opt,name=year,proto3" json:"year,omitempty"` - Month uint32 `protobuf:"varint,3,opt,name=month,proto3" json:"month,omitempty"` - Day uint32 `protobuf:"varint,4,opt,name=day,proto3" json:"day,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *DateCommandRequest) Reset() { - *x = DateCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[109] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ZWaveProxyRequest) Reset() { + *x = ZWaveProxyRequest{} + mi := &file_api_proto_msgTypes[151] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *DateCommandRequest) String() string { +func (x *ZWaveProxyRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DateCommandRequest) ProtoMessage() {} +func (*ZWaveProxyRequest) ProtoMessage() {} -func (x *DateCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[109] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ZWaveProxyRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[151] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10123,72 +14433,57 @@ func (x *DateCommandRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DateCommandRequest.ProtoReflect.Descriptor instead. -func (*DateCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{109} -} - -func (x *DateCommandRequest) GetKey() uint32 { - if x != nil { - return x.Key - } - return 0 -} - -func (x *DateCommandRequest) GetYear() uint32 { - if x != nil { - return x.Year - } - return 0 +// Deprecated: Use ZWaveProxyRequest.ProtoReflect.Descriptor instead. +func (*ZWaveProxyRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{151} } -func (x *DateCommandRequest) GetMonth() uint32 { +func (x *ZWaveProxyRequest) GetType() ZWaveProxyRequestType { if x != nil { - return x.Month + return x.Type } - return 0 + return ZWaveProxyRequestType_ZWAVE_PROXY_REQUEST_TYPE_SUBSCRIBE } -func (x *DateCommandRequest) GetDay() uint32 { +func (x *ZWaveProxyRequest) GetData() []byte { if x != nil { - return x.Day + return x.Data } - return 0 + return nil } -// ==================== DATETIME TIME ==================== -type ListEntitiesTimeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` +// Listing of infrared instances +type ListEntitiesInfraredResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,4,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,5,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,6,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceId uint32 `protobuf:"varint,7,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Capabilities uint32 `protobuf:"varint,8,opt,name=capabilities,proto3" json:"capabilities,omitempty"` // Bitfield of InfraredCapabilityFlags + ReceiverFrequency uint32 `protobuf:"varint,9,opt,name=receiver_frequency,json=receiverFrequency,proto3" json:"receiver_frequency,omitempty"` // Demodulation frequency of the IR receiver in Hz (0 = unspecified) + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ListEntitiesTimeResponse) Reset() { - *x = ListEntitiesTimeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[110] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListEntitiesInfraredResponse) Reset() { + *x = ListEntitiesInfraredResponse{} + mi := &file_api_proto_msgTypes[152] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListEntitiesTimeResponse) String() string { +func (x *ListEntitiesInfraredResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListEntitiesTimeResponse) ProtoMessage() {} +func (*ListEntitiesInfraredResponse) ProtoMessage() {} -func (x *ListEntitiesTimeResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[110] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesInfraredResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[152] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10198,92 +14493,103 @@ func (x *ListEntitiesTimeResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListEntitiesTimeResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesTimeResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{110} +// Deprecated: Use ListEntitiesInfraredResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesInfraredResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{152} } -func (x *ListEntitiesTimeResponse) GetObjectId() string { +func (x *ListEntitiesInfraredResponse) GetObjectId() string { if x != nil { return x.ObjectId } return "" } -func (x *ListEntitiesTimeResponse) GetKey() uint32 { +func (x *ListEntitiesInfraredResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *ListEntitiesTimeResponse) GetName() string { +func (x *ListEntitiesInfraredResponse) GetName() string { if x != nil { return x.Name } return "" } -func (x *ListEntitiesTimeResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" -} - -func (x *ListEntitiesTimeResponse) GetIcon() string { +func (x *ListEntitiesInfraredResponse) GetIcon() string { if x != nil { return x.Icon } return "" } -func (x *ListEntitiesTimeResponse) GetDisabledByDefault() bool { +func (x *ListEntitiesInfraredResponse) GetDisabledByDefault() bool { if x != nil { return x.DisabledByDefault } return false } -func (x *ListEntitiesTimeResponse) GetEntityCategory() EntityCategory { +func (x *ListEntitiesInfraredResponse) GetEntityCategory() EntityCategory { if x != nil { return x.EntityCategory } return EntityCategory_ENTITY_CATEGORY_NONE } -type TimeStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesInfraredResponse) GetDeviceId() uint32 { + if x != nil { + return x.DeviceId + } + return 0 +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - // If the time does not have a valid state yet. - // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller - MissingState bool `protobuf:"varint,2,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` - Hour uint32 `protobuf:"varint,3,opt,name=hour,proto3" json:"hour,omitempty"` - Minute uint32 `protobuf:"varint,4,opt,name=minute,proto3" json:"minute,omitempty"` - Second uint32 `protobuf:"varint,5,opt,name=second,proto3" json:"second,omitempty"` +func (x *ListEntitiesInfraredResponse) GetCapabilities() uint32 { + if x != nil { + return x.Capabilities + } + return 0 } -func (x *TimeStateResponse) Reset() { - *x = TimeStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[111] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ListEntitiesInfraredResponse) GetReceiverFrequency() uint32 { + if x != nil { + return x.ReceiverFrequency } + return 0 } -func (x *TimeStateResponse) String() string { +// Command to transmit infrared/RF data using raw timings +type InfraredRFTransmitRawTimingsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + DeviceId uint32 `protobuf:"varint,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` // Key identifying the transmitter instance + CarrierFrequency uint32 `protobuf:"varint,3,opt,name=carrier_frequency,json=carrierFrequency,proto3" json:"carrier_frequency,omitempty"` // Carrier frequency in Hz + RepeatCount uint32 `protobuf:"varint,4,opt,name=repeat_count,json=repeatCount,proto3" json:"repeat_count,omitempty"` // Number of times to transmit (1 = once, 2 = twice, etc.) + Timings []int32 `protobuf:"zigzag32,5,rep,packed,name=timings,proto3" json:"timings,omitempty"` // Raw timings in microseconds (zigzag-encoded): positive = mark (LED/TX on), negative = space (LED/TX off) + Modulation uint32 `protobuf:"varint,6,opt,name=modulation,proto3" json:"modulation,omitempty"` // RadioFrequencyModulation enum value (0 = OOK; ignored for IR entities) + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InfraredRFTransmitRawTimingsRequest) Reset() { + *x = InfraredRFTransmitRawTimingsRequest{} + mi := &file_api_proto_msgTypes[153] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InfraredRFTransmitRawTimingsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TimeStateResponse) ProtoMessage() {} +func (*InfraredRFTransmitRawTimingsRequest) ProtoMessage() {} -func (x *TimeStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[111] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InfraredRFTransmitRawTimingsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[153] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10293,75 +14599,79 @@ func (x *TimeStateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TimeStateResponse.ProtoReflect.Descriptor instead. -func (*TimeStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{111} +// Deprecated: Use InfraredRFTransmitRawTimingsRequest.ProtoReflect.Descriptor instead. +func (*InfraredRFTransmitRawTimingsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{153} } -func (x *TimeStateResponse) GetKey() uint32 { +func (x *InfraredRFTransmitRawTimingsRequest) GetDeviceId() uint32 { if x != nil { - return x.Key + return x.DeviceId } return 0 } -func (x *TimeStateResponse) GetMissingState() bool { +func (x *InfraredRFTransmitRawTimingsRequest) GetKey() uint32 { if x != nil { - return x.MissingState + return x.Key } - return false + return 0 } -func (x *TimeStateResponse) GetHour() uint32 { +func (x *InfraredRFTransmitRawTimingsRequest) GetCarrierFrequency() uint32 { if x != nil { - return x.Hour + return x.CarrierFrequency } return 0 } -func (x *TimeStateResponse) GetMinute() uint32 { +func (x *InfraredRFTransmitRawTimingsRequest) GetRepeatCount() uint32 { if x != nil { - return x.Minute + return x.RepeatCount } return 0 } -func (x *TimeStateResponse) GetSecond() uint32 { +func (x *InfraredRFTransmitRawTimingsRequest) GetTimings() []int32 { if x != nil { - return x.Second + return x.Timings + } + return nil +} + +func (x *InfraredRFTransmitRawTimingsRequest) GetModulation() uint32 { + if x != nil { + return x.Modulation } return 0 } -type TimeCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +// Event message for received infrared/RF data +type InfraredRFReceiveEvent struct { + state protoimpl.MessageState `protogen:"open.v1"` + DeviceId uint32 `protobuf:"varint,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` // Key identifying the receiver instance + Timings []int32 `protobuf:"zigzag32,3,rep,packed,name=timings,proto3" json:"timings,omitempty"` // Raw timings in microseconds (zigzag-encoded): alternating mark/space periods unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - Hour uint32 `protobuf:"varint,2,opt,name=hour,proto3" json:"hour,omitempty"` - Minute uint32 `protobuf:"varint,3,opt,name=minute,proto3" json:"minute,omitempty"` - Second uint32 `protobuf:"varint,4,opt,name=second,proto3" json:"second,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *TimeCommandRequest) Reset() { - *x = TimeCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[112] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *InfraredRFReceiveEvent) Reset() { + *x = InfraredRFReceiveEvent{} + mi := &file_api_proto_msgTypes[154] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *TimeCommandRequest) String() string { +func (x *InfraredRFReceiveEvent) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TimeCommandRequest) ProtoMessage() {} +func (*InfraredRFReceiveEvent) ProtoMessage() {} -func (x *TimeCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[112] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InfraredRFReceiveEvent) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[154] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10371,74 +14681,66 @@ func (x *TimeCommandRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TimeCommandRequest.ProtoReflect.Descriptor instead. -func (*TimeCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{112} -} - -func (x *TimeCommandRequest) GetKey() uint32 { - if x != nil { - return x.Key - } - return 0 +// Deprecated: Use InfraredRFReceiveEvent.ProtoReflect.Descriptor instead. +func (*InfraredRFReceiveEvent) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{154} } -func (x *TimeCommandRequest) GetHour() uint32 { +func (x *InfraredRFReceiveEvent) GetDeviceId() uint32 { if x != nil { - return x.Hour + return x.DeviceId } return 0 } -func (x *TimeCommandRequest) GetMinute() uint32 { +func (x *InfraredRFReceiveEvent) GetKey() uint32 { if x != nil { - return x.Minute + return x.Key } return 0 } -func (x *TimeCommandRequest) GetSecond() uint32 { +func (x *InfraredRFReceiveEvent) GetTimings() []int32 { if x != nil { - return x.Second - } - return 0 -} - -// ==================== EVENT ==================== -type ListEntitiesEventResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` - DeviceClass string `protobuf:"bytes,8,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` - EventTypes []string `protobuf:"bytes,9,rep,name=event_types,json=eventTypes,proto3" json:"event_types,omitempty"` -} - -func (x *ListEntitiesEventResponse) Reset() { - *x = ListEntitiesEventResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[113] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + return x.Timings } + return nil } -func (x *ListEntitiesEventResponse) String() string { +// Lists available radio frequency entity instances +type ListEntitiesRadioFrequencyResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` + Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Icon string `protobuf:"bytes,4,opt,name=icon,proto3" json:"icon,omitempty"` + DisabledByDefault bool `protobuf:"varint,5,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` + EntityCategory EntityCategory `protobuf:"varint,6,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + DeviceId uint32 `protobuf:"varint,7,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Capabilities uint32 `protobuf:"varint,8,opt,name=capabilities,proto3" json:"capabilities,omitempty"` // Bitmask of RadioFrequencyCapabilityFlags: bit 0 = transmitter, bit 1 = receiver + FrequencyMin uint32 `protobuf:"varint,9,opt,name=frequency_min,json=frequencyMin,proto3" json:"frequency_min,omitempty"` // Minimum tunable frequency in Hz; if min == max (non-zero): fixed frequency; 0 = unspecified + FrequencyMax uint32 `protobuf:"varint,10,opt,name=frequency_max,json=frequencyMax,proto3" json:"frequency_max,omitempty"` // Maximum tunable frequency in Hz; 0 = unspecified + SupportedModulations uint32 `protobuf:"varint,11,opt,name=supported_modulations,json=supportedModulations,proto3" json:"supported_modulations,omitempty"` // Bitmask of supported RadioFrequencyModulation values (bit N = modulation N supported) + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListEntitiesRadioFrequencyResponse) Reset() { + *x = ListEntitiesRadioFrequencyResponse{} + mi := &file_api_proto_msgTypes[155] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListEntitiesRadioFrequencyResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListEntitiesEventResponse) ProtoMessage() {} +func (*ListEntitiesRadioFrequencyResponse) ProtoMessage() {} -func (x *ListEntitiesEventResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[113] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListEntitiesRadioFrequencyResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[155] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10448,101 +14750,117 @@ func (x *ListEntitiesEventResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListEntitiesEventResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesEventResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{113} +// Deprecated: Use ListEntitiesRadioFrequencyResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesRadioFrequencyResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{155} } -func (x *ListEntitiesEventResponse) GetObjectId() string { +func (x *ListEntitiesRadioFrequencyResponse) GetObjectId() string { if x != nil { return x.ObjectId } return "" } -func (x *ListEntitiesEventResponse) GetKey() uint32 { +func (x *ListEntitiesRadioFrequencyResponse) GetKey() uint32 { if x != nil { return x.Key } return 0 } -func (x *ListEntitiesEventResponse) GetName() string { +func (x *ListEntitiesRadioFrequencyResponse) GetName() string { if x != nil { return x.Name } return "" } -func (x *ListEntitiesEventResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" -} - -func (x *ListEntitiesEventResponse) GetIcon() string { +func (x *ListEntitiesRadioFrequencyResponse) GetIcon() string { if x != nil { return x.Icon } return "" } -func (x *ListEntitiesEventResponse) GetDisabledByDefault() bool { +func (x *ListEntitiesRadioFrequencyResponse) GetDisabledByDefault() bool { if x != nil { return x.DisabledByDefault } return false } -func (x *ListEntitiesEventResponse) GetEntityCategory() EntityCategory { +func (x *ListEntitiesRadioFrequencyResponse) GetEntityCategory() EntityCategory { if x != nil { return x.EntityCategory } return EntityCategory_ENTITY_CATEGORY_NONE } -func (x *ListEntitiesEventResponse) GetDeviceClass() string { +func (x *ListEntitiesRadioFrequencyResponse) GetDeviceId() uint32 { if x != nil { - return x.DeviceClass + return x.DeviceId } - return "" + return 0 } -func (x *ListEntitiesEventResponse) GetEventTypes() []string { +func (x *ListEntitiesRadioFrequencyResponse) GetCapabilities() uint32 { if x != nil { - return x.EventTypes + return x.Capabilities } - return nil + return 0 } -type EventResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListEntitiesRadioFrequencyResponse) GetFrequencyMin() uint32 { + if x != nil { + return x.FrequencyMin + } + return 0 +} - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - EventType string `protobuf:"bytes,2,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` +func (x *ListEntitiesRadioFrequencyResponse) GetFrequencyMax() uint32 { + if x != nil { + return x.FrequencyMax + } + return 0 } -func (x *EventResponse) Reset() { - *x = EventResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[114] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ListEntitiesRadioFrequencyResponse) GetSupportedModulations() uint32 { + if x != nil { + return x.SupportedModulations } + return 0 } -func (x *EventResponse) String() string { +// Configure UART parameters for a serial proxy instance +type SerialProxyConfigureRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Instance uint32 `protobuf:"varint,1,opt,name=instance,proto3" json:"instance,omitempty"` // Instance index (0-based) + Baudrate uint32 `protobuf:"varint,2,opt,name=baudrate,proto3" json:"baudrate,omitempty"` // Baud rate in bits per second + FlowControl bool `protobuf:"varint,3,opt,name=flow_control,json=flowControl,proto3" json:"flow_control,omitempty"` // Enable hardware flow control + Parity SerialProxyParity `protobuf:"varint,4,opt,name=parity,proto3,enum=SerialProxyParity" json:"parity,omitempty"` // Parity setting + StopBits uint32 `protobuf:"varint,5,opt,name=stop_bits,json=stopBits,proto3" json:"stop_bits,omitempty"` // Number of stop bits (1 or 2) + DataSize uint32 `protobuf:"varint,6,opt,name=data_size,json=dataSize,proto3" json:"data_size,omitempty"` // Number of data bits (5-8) + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SerialProxyConfigureRequest) Reset() { + *x = SerialProxyConfigureRequest{} + mi := &file_api_proto_msgTypes[156] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SerialProxyConfigureRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EventResponse) ProtoMessage() {} +func (*SerialProxyConfigureRequest) ProtoMessage() {} -func (x *EventResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[114] - if protoimpl.UnsafeEnabled && x != nil { +func (x *SerialProxyConfigureRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[156] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10552,62 +14870,78 @@ func (x *EventResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EventResponse.ProtoReflect.Descriptor instead. -func (*EventResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{114} +// Deprecated: Use SerialProxyConfigureRequest.ProtoReflect.Descriptor instead. +func (*SerialProxyConfigureRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{156} } -func (x *EventResponse) GetKey() uint32 { +func (x *SerialProxyConfigureRequest) GetInstance() uint32 { if x != nil { - return x.Key + return x.Instance } return 0 } -func (x *EventResponse) GetEventType() string { +func (x *SerialProxyConfigureRequest) GetBaudrate() uint32 { if x != nil { - return x.EventType + return x.Baudrate } - return "" + return 0 } -// ==================== VALVE ==================== -type ListEntitiesValveResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *SerialProxyConfigureRequest) GetFlowControl() bool { + if x != nil { + return x.FlowControl + } + return false +} - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` - DeviceClass string `protobuf:"bytes,8,opt,name=device_class,json=deviceClass,proto3" json:"device_class,omitempty"` - AssumedState bool `protobuf:"varint,9,opt,name=assumed_state,json=assumedState,proto3" json:"assumed_state,omitempty"` - SupportsPosition bool `protobuf:"varint,10,opt,name=supports_position,json=supportsPosition,proto3" json:"supports_position,omitempty"` - SupportsStop bool `protobuf:"varint,11,opt,name=supports_stop,json=supportsStop,proto3" json:"supports_stop,omitempty"` +func (x *SerialProxyConfigureRequest) GetParity() SerialProxyParity { + if x != nil { + return x.Parity + } + return SerialProxyParity_SERIAL_PROXY_PARITY_NONE } -func (x *ListEntitiesValveResponse) Reset() { - *x = ListEntitiesValveResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[115] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *SerialProxyConfigureRequest) GetStopBits() uint32 { + if x != nil { + return x.StopBits } + return 0 } -func (x *ListEntitiesValveResponse) String() string { +func (x *SerialProxyConfigureRequest) GetDataSize() uint32 { + if x != nil { + return x.DataSize + } + return 0 +} + +// Data received from a serial device, forwarded to clients +type SerialProxyDataReceived struct { + state protoimpl.MessageState `protogen:"open.v1"` + Instance uint32 `protobuf:"varint,1,opt,name=instance,proto3" json:"instance,omitempty"` // Instance index (0-based) + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` // Raw data received from the serial device + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SerialProxyDataReceived) Reset() { + *x = SerialProxyDataReceived{} + mi := &file_api_proto_msgTypes[157] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SerialProxyDataReceived) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListEntitiesValveResponse) ProtoMessage() {} +func (*SerialProxyDataReceived) ProtoMessage() {} -func (x *ListEntitiesValveResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[115] - if protoimpl.UnsafeEnabled && x != nil { +func (x *SerialProxyDataReceived) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[157] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10617,116 +14951,103 @@ func (x *ListEntitiesValveResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListEntitiesValveResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesValveResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{115} -} - -func (x *ListEntitiesValveResponse) GetObjectId() string { - if x != nil { - return x.ObjectId - } - return "" +// Deprecated: Use SerialProxyDataReceived.ProtoReflect.Descriptor instead. +func (*SerialProxyDataReceived) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{157} } -func (x *ListEntitiesValveResponse) GetKey() uint32 { +func (x *SerialProxyDataReceived) GetInstance() uint32 { if x != nil { - return x.Key + return x.Instance } return 0 } -func (x *ListEntitiesValveResponse) GetName() string { +func (x *SerialProxyDataReceived) GetData() []byte { if x != nil { - return x.Name + return x.Data } - return "" + return nil } -func (x *ListEntitiesValveResponse) GetUniqueId() string { - if x != nil { - return x.UniqueId - } - return "" +// Write data to a serial device +type SerialProxyWriteRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Instance uint32 `protobuf:"varint,1,opt,name=instance,proto3" json:"instance,omitempty"` // Instance index (0-based) + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` // Raw data to write to the serial device + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ListEntitiesValveResponse) GetIcon() string { - if x != nil { - return x.Icon - } - return "" +func (x *SerialProxyWriteRequest) Reset() { + *x = SerialProxyWriteRequest{} + mi := &file_api_proto_msgTypes[158] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListEntitiesValveResponse) GetDisabledByDefault() bool { - if x != nil { - return x.DisabledByDefault - } - return false +func (x *SerialProxyWriteRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *ListEntitiesValveResponse) GetEntityCategory() EntityCategory { - if x != nil { - return x.EntityCategory - } - return EntityCategory_ENTITY_CATEGORY_NONE -} +func (*SerialProxyWriteRequest) ProtoMessage() {} -func (x *ListEntitiesValveResponse) GetDeviceClass() string { +func (x *SerialProxyWriteRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[158] if x != nil { - return x.DeviceClass + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *ListEntitiesValveResponse) GetAssumedState() bool { - if x != nil { - return x.AssumedState - } - return false +// Deprecated: Use SerialProxyWriteRequest.ProtoReflect.Descriptor instead. +func (*SerialProxyWriteRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{158} } -func (x *ListEntitiesValveResponse) GetSupportsPosition() bool { +func (x *SerialProxyWriteRequest) GetInstance() uint32 { if x != nil { - return x.SupportsPosition + return x.Instance } - return false + return 0 } -func (x *ListEntitiesValveResponse) GetSupportsStop() bool { +func (x *SerialProxyWriteRequest) GetData() []byte { if x != nil { - return x.SupportsStop + return x.Data } - return false + return nil } -type ValveStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +// Set modem control pin states (RTS and DTR) +type SerialProxySetModemPinsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Instance uint32 `protobuf:"varint,1,opt,name=instance,proto3" json:"instance,omitempty"` // Instance index (0-based) + LineStates uint32 `protobuf:"varint,2,opt,name=line_states,json=lineStates,proto3" json:"line_states,omitempty"` // Bitmask of SerialProxyLineStateFlags unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - Position float32 `protobuf:"fixed32,2,opt,name=position,proto3" json:"position,omitempty"` - CurrentOperation ValveOperation `protobuf:"varint,3,opt,name=current_operation,json=currentOperation,proto3,enum=ValveOperation" json:"current_operation,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ValveStateResponse) Reset() { - *x = ValveStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[116] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *SerialProxySetModemPinsRequest) Reset() { + *x = SerialProxySetModemPinsRequest{} + mi := &file_api_proto_msgTypes[159] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ValveStateResponse) String() string { +func (x *SerialProxySetModemPinsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ValveStateResponse) ProtoMessage() {} +func (*SerialProxySetModemPinsRequest) ProtoMessage() {} -func (x *ValveStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[116] - if protoimpl.UnsafeEnabled && x != nil { +func (x *SerialProxySetModemPinsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[159] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10736,61 +15057,49 @@ func (x *ValveStateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ValveStateResponse.ProtoReflect.Descriptor instead. -func (*ValveStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{116} +// Deprecated: Use SerialProxySetModemPinsRequest.ProtoReflect.Descriptor instead. +func (*SerialProxySetModemPinsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{159} } -func (x *ValveStateResponse) GetKey() uint32 { +func (x *SerialProxySetModemPinsRequest) GetInstance() uint32 { if x != nil { - return x.Key + return x.Instance } return 0 } -func (x *ValveStateResponse) GetPosition() float32 { +func (x *SerialProxySetModemPinsRequest) GetLineStates() uint32 { if x != nil { - return x.Position + return x.LineStates } return 0 } -func (x *ValveStateResponse) GetCurrentOperation() ValveOperation { - if x != nil { - return x.CurrentOperation - } - return ValveOperation_VALVE_OPERATION_IDLE -} - -type ValveCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +// Request current modem control pin states +type SerialProxyGetModemPinsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Instance uint32 `protobuf:"varint,1,opt,name=instance,proto3" json:"instance,omitempty"` // Instance index (0-based) unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - HasPosition bool `protobuf:"varint,2,opt,name=has_position,json=hasPosition,proto3" json:"has_position,omitempty"` - Position float32 `protobuf:"fixed32,3,opt,name=position,proto3" json:"position,omitempty"` - Stop bool `protobuf:"varint,4,opt,name=stop,proto3" json:"stop,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ValveCommandRequest) Reset() { - *x = ValveCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[117] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *SerialProxyGetModemPinsRequest) Reset() { + *x = SerialProxyGetModemPinsRequest{} + mi := &file_api_proto_msgTypes[160] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ValveCommandRequest) String() string { +func (x *SerialProxyGetModemPinsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ValveCommandRequest) ProtoMessage() {} +func (*SerialProxyGetModemPinsRequest) ProtoMessage() {} -func (x *ValveCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[117] - if protoimpl.UnsafeEnabled && x != nil { +func (x *SerialProxyGetModemPinsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[160] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10800,72 +15109,96 @@ func (x *ValveCommandRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ValveCommandRequest.ProtoReflect.Descriptor instead. -func (*ValveCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{117} +// Deprecated: Use SerialProxyGetModemPinsRequest.ProtoReflect.Descriptor instead. +func (*SerialProxyGetModemPinsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{160} } -func (x *ValveCommandRequest) GetKey() uint32 { +func (x *SerialProxyGetModemPinsRequest) GetInstance() uint32 { if x != nil { - return x.Key + return x.Instance } return 0 } -func (x *ValveCommandRequest) GetHasPosition() bool { +// Response with current modem control pin states +type SerialProxyGetModemPinsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Instance uint32 `protobuf:"varint,1,opt,name=instance,proto3" json:"instance,omitempty"` // Instance index (0-based) + LineStates uint32 `protobuf:"varint,2,opt,name=line_states,json=lineStates,proto3" json:"line_states,omitempty"` // Bitmask of SerialProxyLineStateFlags + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SerialProxyGetModemPinsResponse) Reset() { + *x = SerialProxyGetModemPinsResponse{} + mi := &file_api_proto_msgTypes[161] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SerialProxyGetModemPinsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SerialProxyGetModemPinsResponse) ProtoMessage() {} + +func (x *SerialProxyGetModemPinsResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[161] if x != nil { - return x.HasPosition + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return false + return mi.MessageOf(x) } -func (x *ValveCommandRequest) GetPosition() float32 { +// Deprecated: Use SerialProxyGetModemPinsResponse.ProtoReflect.Descriptor instead. +func (*SerialProxyGetModemPinsResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{161} +} + +func (x *SerialProxyGetModemPinsResponse) GetInstance() uint32 { if x != nil { - return x.Position + return x.Instance } return 0 } -func (x *ValveCommandRequest) GetStop() bool { +func (x *SerialProxyGetModemPinsResponse) GetLineStates() uint32 { if x != nil { - return x.Stop + return x.LineStates } - return false + return 0 } -// ==================== DATETIME DATETIME ==================== -type ListEntitiesDateTimeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +// Generic request message for simple serial proxy operations +type SerialProxyRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Instance uint32 `protobuf:"varint,1,opt,name=instance,proto3" json:"instance,omitempty"` // Instance index (0-based) + Type SerialProxyRequestType `protobuf:"varint,2,opt,name=type,proto3,enum=SerialProxyRequestType" json:"type,omitempty"` // Request type unknownFields protoimpl.UnknownFields - - ObjectId string `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - Key uint32 `protobuf:"fixed32,2,opt,name=key,proto3" json:"key,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - UniqueId string `protobuf:"bytes,4,opt,name=unique_id,json=uniqueId,proto3" json:"unique_id,omitempty"` - Icon string `protobuf:"bytes,5,opt,name=icon,proto3" json:"icon,omitempty"` - DisabledByDefault bool `protobuf:"varint,6,opt,name=disabled_by_default,json=disabledByDefault,proto3" json:"disabled_by_default,omitempty"` - EntityCategory EntityCategory `protobuf:"varint,7,opt,name=entity_category,json=entityCategory,proto3,enum=EntityCategory" json:"entity_category,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ListEntitiesDateTimeResponse) Reset() { - *x = ListEntitiesDateTimeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[118] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *SerialProxyRequest) Reset() { + *x = SerialProxyRequest{} + mi := &file_api_proto_msgTypes[162] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListEntitiesDateTimeResponse) String() string { +func (x *SerialProxyRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListEntitiesDateTimeResponse) ProtoMessage() {} +func (*SerialProxyRequest) ProtoMessage() {} -func (x *ListEntitiesDateTimeResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[118] - if protoimpl.UnsafeEnabled && x != nil { +func (x *SerialProxyRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[162] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10875,90 +15208,122 @@ func (x *ListEntitiesDateTimeResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListEntitiesDateTimeResponse.ProtoReflect.Descriptor instead. -func (*ListEntitiesDateTimeResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{118} +// Deprecated: Use SerialProxyRequest.ProtoReflect.Descriptor instead. +func (*SerialProxyRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{162} } -func (x *ListEntitiesDateTimeResponse) GetObjectId() string { +func (x *SerialProxyRequest) GetInstance() uint32 { if x != nil { - return x.ObjectId + return x.Instance } - return "" + return 0 } -func (x *ListEntitiesDateTimeResponse) GetKey() uint32 { +func (x *SerialProxyRequest) GetType() SerialProxyRequestType { if x != nil { - return x.Key + return x.Type } - return 0 + return SerialProxyRequestType_SERIAL_PROXY_REQUEST_TYPE_SUBSCRIBE } -func (x *ListEntitiesDateTimeResponse) GetName() string { +// Response to a SerialProxyRequest (e.g. flush completion or failure) +type SerialProxyRequestResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Instance uint32 `protobuf:"varint,1,opt,name=instance,proto3" json:"instance,omitempty"` // Instance index (0-based) + Type SerialProxyRequestType `protobuf:"varint,2,opt,name=type,proto3,enum=SerialProxyRequestType" json:"type,omitempty"` // Which request type this responds to + Status SerialProxyStatus `protobuf:"varint,3,opt,name=status,proto3,enum=SerialProxyStatus" json:"status,omitempty"` // Result status + ErrorMessage string `protobuf:"bytes,4,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` // Additional detail on failure (optional) + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SerialProxyRequestResponse) Reset() { + *x = SerialProxyRequestResponse{} + mi := &file_api_proto_msgTypes[163] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SerialProxyRequestResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SerialProxyRequestResponse) ProtoMessage() {} + +func (x *SerialProxyRequestResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[163] if x != nil { - return x.Name + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) +} + +// Deprecated: Use SerialProxyRequestResponse.ProtoReflect.Descriptor instead. +func (*SerialProxyRequestResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{163} } -func (x *ListEntitiesDateTimeResponse) GetUniqueId() string { +func (x *SerialProxyRequestResponse) GetInstance() uint32 { if x != nil { - return x.UniqueId + return x.Instance } - return "" + return 0 } -func (x *ListEntitiesDateTimeResponse) GetIcon() string { +func (x *SerialProxyRequestResponse) GetType() SerialProxyRequestType { if x != nil { - return x.Icon + return x.Type } - return "" + return SerialProxyRequestType_SERIAL_PROXY_REQUEST_TYPE_SUBSCRIBE } -func (x *ListEntitiesDateTimeResponse) GetDisabledByDefault() bool { +func (x *SerialProxyRequestResponse) GetStatus() SerialProxyStatus { if x != nil { - return x.DisabledByDefault + return x.Status } - return false + return SerialProxyStatus_SERIAL_PROXY_STATUS_OK } -func (x *ListEntitiesDateTimeResponse) GetEntityCategory() EntityCategory { +func (x *SerialProxyRequestResponse) GetErrorMessage() string { if x != nil { - return x.EntityCategory + return x.ErrorMessage } - return EntityCategory_ENTITY_CATEGORY_NONE + return "" } -type DateTimeStateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +// ==================== BLUETOOTH CONNECTION PARAMS ==================== +type BluetoothSetConnectionParamsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + MinInterval uint32 `protobuf:"varint,2,opt,name=min_interval,json=minInterval,proto3" json:"min_interval,omitempty"` // units of 1.25ms + MaxInterval uint32 `protobuf:"varint,3,opt,name=max_interval,json=maxInterval,proto3" json:"max_interval,omitempty"` // units of 1.25ms + Latency uint32 `protobuf:"varint,4,opt,name=latency,proto3" json:"latency,omitempty"` + Timeout uint32 `protobuf:"varint,5,opt,name=timeout,proto3" json:"timeout,omitempty"` // units of 10ms unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - // If the datetime does not have a valid state yet. - // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller - MissingState bool `protobuf:"varint,2,opt,name=missing_state,json=missingState,proto3" json:"missing_state,omitempty"` - EpochSeconds uint32 `protobuf:"fixed32,3,opt,name=epoch_seconds,json=epochSeconds,proto3" json:"epoch_seconds,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *DateTimeStateResponse) Reset() { - *x = DateTimeStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[119] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *BluetoothSetConnectionParamsRequest) Reset() { + *x = BluetoothSetConnectionParamsRequest{} + mi := &file_api_proto_msgTypes[164] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *DateTimeStateResponse) String() string { +func (x *BluetoothSetConnectionParamsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DateTimeStateResponse) ProtoMessage() {} +func (*BluetoothSetConnectionParamsRequest) ProtoMessage() {} -func (x *DateTimeStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[119] - if protoimpl.UnsafeEnabled && x != nil { +func (x *BluetoothSetConnectionParamsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[164] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10968,59 +15333,70 @@ func (x *DateTimeStateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DateTimeStateResponse.ProtoReflect.Descriptor instead. -func (*DateTimeStateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{119} +// Deprecated: Use BluetoothSetConnectionParamsRequest.ProtoReflect.Descriptor instead. +func (*BluetoothSetConnectionParamsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{164} } -func (x *DateTimeStateResponse) GetKey() uint32 { +func (x *BluetoothSetConnectionParamsRequest) GetAddress() uint64 { if x != nil { - return x.Key + return x.Address } return 0 } -func (x *DateTimeStateResponse) GetMissingState() bool { +func (x *BluetoothSetConnectionParamsRequest) GetMinInterval() uint32 { if x != nil { - return x.MissingState + return x.MinInterval } - return false + return 0 } -func (x *DateTimeStateResponse) GetEpochSeconds() uint32 { +func (x *BluetoothSetConnectionParamsRequest) GetMaxInterval() uint32 { if x != nil { - return x.EpochSeconds + return x.MaxInterval } return 0 } -type DateTimeCommandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key uint32 `protobuf:"fixed32,1,opt,name=key,proto3" json:"key,omitempty"` - EpochSeconds uint32 `protobuf:"fixed32,2,opt,name=epoch_seconds,json=epochSeconds,proto3" json:"epoch_seconds,omitempty"` +func (x *BluetoothSetConnectionParamsRequest) GetLatency() uint32 { + if x != nil { + return x.Latency + } + return 0 } -func (x *DateTimeCommandRequest) Reset() { - *x = DateTimeCommandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[120] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *BluetoothSetConnectionParamsRequest) GetTimeout() uint32 { + if x != nil { + return x.Timeout } + return 0 } -func (x *DateTimeCommandRequest) String() string { +type BluetoothSetConnectionParamsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Address uint64 `protobuf:"varint,1,opt,name=address,proto3" json:"address,omitempty"` + Error int32 `protobuf:"varint,2,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BluetoothSetConnectionParamsResponse) Reset() { + *x = BluetoothSetConnectionParamsResponse{} + mi := &file_api_proto_msgTypes[165] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BluetoothSetConnectionParamsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DateTimeCommandRequest) ProtoMessage() {} +func (*BluetoothSetConnectionParamsResponse) ProtoMessage() {} -func (x *DateTimeCommandRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[120] - if protoimpl.UnsafeEnabled && x != nil { +func (x *BluetoothSetConnectionParamsResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[165] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -11030,2398 +15406,1926 @@ func (x *DateTimeCommandRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DateTimeCommandRequest.ProtoReflect.Descriptor instead. -func (*DateTimeCommandRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{120} +// Deprecated: Use BluetoothSetConnectionParamsResponse.ProtoReflect.Descriptor instead. +func (*BluetoothSetConnectionParamsResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{165} } -func (x *DateTimeCommandRequest) GetKey() uint32 { +func (x *BluetoothSetConnectionParamsResponse) GetAddress() uint64 { if x != nil { - return x.Key + return x.Address } return 0 } -func (x *DateTimeCommandRequest) GetEpochSeconds() uint32 { +func (x *BluetoothSetConnectionParamsResponse) GetError() int32 { if x != nil { - return x.EpochSeconds + return x.Error } return 0 } var File_api_proto protoreflect.FileDescriptor -var file_api_proto_rawDesc = []byte{ - 0x0a, 0x09, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x61, 0x70, 0x69, - 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x92, - 0x01, 0x0a, 0x0c, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x70, 0x69, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x11, - 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x3a, 0x09, 0xe0, 0x40, 0x01, 0xe8, 0x40, 0x02, - 0x80, 0x41, 0x01, 0x22, 0xa7, 0x01, 0x0a, 0x0d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0f, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x6a, 0x6f, - 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x70, - 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x1f, 0x0a, - 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x3a, 0x09, 0xe0, 0x40, 0x02, 0xe8, 0x40, 0x01, 0x80, 0x41, 0x01, 0x22, 0x37, 0x0a, - 0x0e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3a, 0x09, 0xe0, 0x40, 0x03, - 0xe8, 0x40, 0x02, 0x80, 0x41, 0x01, 0x22, 0x47, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x6e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x50, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x3a, 0x09, 0xe0, 0x40, 0x04, 0xe8, 0x40, 0x01, 0x80, 0x41, 0x01, 0x22, - 0x1e, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x3a, 0x09, 0xe0, 0x40, 0x05, 0xe8, 0x40, 0x00, 0x80, 0x41, 0x01, 0x22, - 0x1f, 0x0a, 0x12, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x09, 0xe0, 0x40, 0x06, 0xe8, 0x40, 0x00, 0x80, 0x41, 0x01, - 0x22, 0x15, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3a, - 0x06, 0xe0, 0x40, 0x07, 0xe8, 0x40, 0x00, 0x22, 0x16, 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x06, 0xe0, 0x40, 0x08, 0xe8, 0x40, 0x00, 0x22, - 0x1b, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x3a, 0x06, 0xe0, 0x40, 0x09, 0xe8, 0x40, 0x02, 0x22, 0xf9, 0x05, 0x0a, - 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x73, 0x5f, 0x70, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x73, - 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x6d, 0x61, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x27, 0x0a, - 0x0f, 0x65, 0x73, 0x70, 0x68, 0x6f, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x73, 0x70, 0x68, 0x6f, 0x6d, 0x65, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x24, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x5f, 0x64, - 0x65, 0x65, 0x70, 0x5f, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x68, 0x61, 0x73, 0x44, 0x65, 0x65, 0x70, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x12, 0x21, 0x0a, - 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x77, 0x65, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0d, 0x77, 0x65, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, - 0x12, 0x43, 0x0a, 0x1e, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x62, 0x6c, 0x75, 0x65, 0x74, - 0x6f, 0x6f, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, - 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x1d, 0x62, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, - 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1a, 0x62, 0x6c, - 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x6e, 0x75, - 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, - 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x6c, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x43, 0x0a, 0x1e, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x76, 0x6f, 0x69, 0x63, - 0x65, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x6c, 0x65, 0x67, 0x61, 0x63, - 0x79, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x1d, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x5f, - 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1a, 0x76, - 0x6f, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x75, 0x67, - 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x72, 0x65, 0x61, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x72, 0x65, 0x61, - 0x3a, 0x06, 0xe0, 0x40, 0x0a, 0xe8, 0x40, 0x01, 0x22, 0x1d, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3a, - 0x06, 0xe0, 0x40, 0x0b, 0xe8, 0x40, 0x02, 0x22, 0x25, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x3a, 0x09, 0xe0, 0x40, 0x13, 0xe8, 0x40, 0x01, 0x80, 0x41, 0x01, 0x22, 0x20, - 0x0a, 0x16, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3a, 0x06, 0xe0, 0x40, 0x14, 0xe8, 0x40, 0x02, - 0x22, 0xf6, 0x02, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, - 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x69, 0x73, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x65, 0x6e, - 0x73, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x12, - 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, - 0x63, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x3a, 0x1a, 0xe0, - 0x40, 0x0c, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x11, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x41, - 0x52, 0x59, 0x5f, 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x22, 0x87, 0x01, 0x0a, 0x19, 0x42, 0x69, - 0x6e, 0x61, 0x72, 0x79, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x3a, 0x1d, 0xe0, 0x40, 0x15, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x11, 0x55, - 0x53, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, - 0x80, 0x41, 0x01, 0x22, 0xcc, 0x03, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, - 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, - 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x73, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, - 0x74, 0x69, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x73, 0x54, 0x69, 0x6c, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x64, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x69, - 0x63, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, - 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x53, 0x74, 0x6f, 0x70, 0x3a, 0x12, - 0xe0, 0x40, 0x0d, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x09, 0x55, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x56, - 0x45, 0x52, 0x22, 0xe1, 0x01, 0x0a, 0x12, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x34, 0x0a, 0x0c, 0x6c, - 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x11, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x69, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x74, 0x69, 0x6c, - 0x74, 0x12, 0x3c, 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x43, - 0x6f, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, - 0x15, 0xe0, 0x40, 0x16, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x09, 0x55, 0x53, 0x45, 0x5f, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x80, 0x41, 0x01, 0x22, 0xaa, 0x02, 0x0a, 0x13, 0x43, 0x6f, 0x76, 0x65, 0x72, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x2c, 0x0a, 0x12, 0x68, 0x61, 0x73, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x68, 0x61, - 0x73, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x3a, - 0x0a, 0x0e, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, - 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x0d, 0x6c, 0x65, 0x67, - 0x61, 0x63, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x61, - 0x73, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0b, 0x68, 0x61, 0x73, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x73, - 0x5f, 0x74, 0x69, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, - 0x54, 0x69, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x04, 0x74, 0x69, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x6f, 0x70, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x3a, 0x15, 0xe0, 0x40, - 0x1e, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x09, 0x55, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x56, 0x45, 0x52, - 0x80, 0x41, 0x01, 0x22, 0xfc, 0x03, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x46, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, - 0x31, 0x0a, 0x14, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x6f, 0x73, 0x63, 0x69, - 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x4f, 0x73, 0x63, 0x69, 0x6c, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x73, - 0x70, 0x65, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x73, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x73, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x53, 0x70, 0x65, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, - 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, - 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x65, 0x64, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x73, - 0x3a, 0x10, 0xe0, 0x40, 0x0e, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x07, 0x55, 0x53, 0x45, 0x5f, 0x46, - 0x41, 0x4e, 0x22, 0x85, 0x02, 0x0a, 0x10, 0x46, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x6f, 0x73, 0x63, 0x69, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6f, 0x73, 0x63, 0x69, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6e, - 0x67, 0x12, 0x23, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x09, 0x2e, 0x46, 0x61, 0x6e, 0x53, 0x70, 0x65, 0x65, 0x64, 0x42, 0x02, 0x18, 0x01, 0x52, - 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x46, 0x61, 0x6e, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x65, 0x64, 0x5f, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x70, 0x65, 0x65, 0x64, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x13, 0xe0, 0x40, 0x17, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x07, - 0x55, 0x53, 0x45, 0x5f, 0x46, 0x41, 0x4e, 0x80, 0x41, 0x01, 0x22, 0xe2, 0x03, 0x0a, 0x11, 0x46, - 0x61, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x70, 0x65, - 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x68, 0x61, - 0x73, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x46, 0x61, 0x6e, 0x53, 0x70, 0x65, 0x65, 0x64, - 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x68, - 0x61, 0x73, 0x5f, 0x6f, 0x73, 0x63, 0x69, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x68, 0x61, 0x73, 0x4f, 0x73, 0x63, 0x69, 0x6c, 0x6c, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x73, 0x63, 0x69, 0x6c, 0x6c, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6f, 0x73, 0x63, 0x69, 0x6c, - 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, - 0x61, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x09, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, - 0x2e, 0x46, 0x61, 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x68, 0x61, 0x73, 0x5f, - 0x73, 0x70, 0x65, 0x65, 0x64, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0d, 0x68, 0x61, 0x73, 0x53, 0x70, 0x65, 0x65, 0x64, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x65, 0x64, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x70, 0x65, 0x65, 0x64, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x68, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x68, 0x61, 0x73, 0x50, - 0x72, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, - 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x13, 0xe0, 0x40, 0x1f, 0xe8, - 0x40, 0x02, 0xf2, 0x40, 0x07, 0x55, 0x53, 0x45, 0x5f, 0x46, 0x41, 0x4e, 0x80, 0x41, 0x01, 0x22, - 0xad, 0x05, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x4c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, 0x3e, 0x0a, - 0x15, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x43, - 0x6f, 0x6c, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x13, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x40, 0x0a, - 0x1a, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x5f, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x18, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x53, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, - 0x32, 0x0a, 0x13, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x73, 0x5f, 0x72, 0x67, 0x62, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, - 0x52, 0x11, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x52, 0x67, 0x62, 0x12, 0x41, 0x0a, 0x1b, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x18, 0x6c, 0x65, - 0x67, 0x61, 0x63, 0x79, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x57, 0x68, 0x69, 0x74, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4d, 0x0a, 0x21, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, - 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, - 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x1e, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x53, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x69, 0x72, - 0x65, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4d, 0x69, - 0x72, 0x65, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x69, 0x72, 0x65, - 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4d, 0x69, 0x72, - 0x65, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x18, 0x0b, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2e, 0x0a, - 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, - 0x6e, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x3a, 0x12, 0xe0, 0x40, 0x0f, - 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x09, 0x55, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x22, - 0x9e, 0x03, 0x0a, 0x12, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x29, - 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x09, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x5f, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x0f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x6e, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x03, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x62, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x62, 0x6c, 0x75, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x77, 0x68, 0x69, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x05, 0x77, 0x68, 0x69, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, - 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x64, 0x5f, 0x77, 0x68, 0x69, 0x74, - 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x63, 0x6f, 0x6c, 0x64, 0x57, 0x68, 0x69, - 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x77, 0x61, 0x72, 0x6d, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x77, 0x61, 0x72, 0x6d, 0x57, 0x68, 0x69, 0x74, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x3a, 0x15, 0xe0, 0x40, 0x18, 0xe8, 0x40, - 0x01, 0xf2, 0x40, 0x09, 0x55, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x80, 0x41, 0x01, - 0x22, 0xbe, 0x07, 0x0a, 0x13, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, - 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, - 0x61, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x25, 0x0a, - 0x0e, 0x68, 0x61, 0x73, 0x5f, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x68, 0x61, 0x73, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x6e, 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, - 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x6e, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, - 0x73, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x0a, 0x63, 0x6f, - 0x6c, 0x6f, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, - 0x2e, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x68, 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x5f, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x14, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x12, 0x68, 0x61, 0x73, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x5f, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, - 0x73, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x61, 0x73, 0x5f, 0x72, 0x67, 0x62, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x68, 0x61, 0x73, 0x52, 0x67, 0x62, 0x12, 0x10, 0x0a, 0x03, 0x72, - 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x67, 0x72, - 0x65, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x04, 0x62, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x77, - 0x68, 0x69, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x57, - 0x68, 0x69, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x68, 0x69, 0x74, 0x65, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x05, 0x77, 0x68, 0x69, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x68, 0x61, - 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x68, 0x61, 0x73, 0x43, 0x6f, - 0x6c, 0x6f, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2b, - 0x0a, 0x11, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x68, - 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x64, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x18, 0x18, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x43, 0x6f, 0x6c, 0x64, 0x57, 0x68, 0x69, 0x74, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x64, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x18, - 0x19, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x63, 0x6f, 0x6c, 0x64, 0x57, 0x68, 0x69, 0x74, 0x65, - 0x12, 0x24, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x5f, 0x77, 0x61, 0x72, 0x6d, 0x5f, 0x77, 0x68, 0x69, - 0x74, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x57, 0x61, 0x72, - 0x6d, 0x57, 0x68, 0x69, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x77, 0x61, 0x72, 0x6d, 0x5f, 0x77, - 0x68, 0x69, 0x74, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x77, 0x61, 0x72, 0x6d, - 0x57, 0x68, 0x69, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x61, 0x73, 0x5f, 0x66, 0x6c, - 0x61, 0x73, 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0e, 0x68, 0x61, 0x73, 0x46, 0x6c, 0x61, 0x73, 0x68, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x65, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x45, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x3a, 0x15, 0xe0, 0x40, 0x20, 0xe8, - 0x40, 0x02, 0xf2, 0x40, 0x09, 0x55, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x80, 0x41, - 0x01, 0x22, 0xb1, 0x04, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x11, 0x75, 0x6e, 0x69, 0x74, 0x4f, 0x66, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, - 0x5f, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x10, 0x61, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, - 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x53, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x52, - 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x16, 0x6c, - 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x53, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x13, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x3a, 0x13, 0xe0, 0x40, 0x10, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x0a, 0x55, 0x53, 0x45, 0x5f, 0x53, - 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x22, 0x7a, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x16, 0xe0, 0x40, 0x19, 0xe8, 0x40, - 0x01, 0xf2, 0x40, 0x0a, 0x55, 0x53, 0x45, 0x5f, 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x80, 0x41, - 0x01, 0x22, 0xd7, 0x02, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x73, 0x73, - 0x75, 0x6d, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x3a, 0x13, 0xe0, 0x40, 0x11, 0xe8, 0x40, 0x01, 0xf2, 0x40, - 0x0a, 0x55, 0x53, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x22, 0x55, 0x0a, 0x13, 0x53, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x16, 0xe0, 0x40, 0x1a, 0xe8, - 0x40, 0x01, 0xf2, 0x40, 0x0a, 0x55, 0x53, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x80, - 0x41, 0x01, 0x22, 0x56, 0x0a, 0x14, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x3a, 0x16, 0xe0, 0x40, 0x21, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x0a, 0x55, 0x53, 0x45, - 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x80, 0x41, 0x01, 0x22, 0xbb, 0x02, 0x0a, 0x1e, 0x4c, - 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x54, 0x65, 0x78, 0x74, 0x53, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, - 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, - 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x3a, 0x18, - 0xe0, 0x40, 0x12, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x0f, 0x55, 0x53, 0x45, 0x5f, 0x54, 0x45, 0x58, - 0x54, 0x5f, 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x22, 0x83, 0x01, 0x0a, 0x17, 0x54, 0x65, 0x78, - 0x74, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x3a, 0x1b, 0xe0, 0x40, 0x1b, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x0f, 0x55, 0x53, 0x45, 0x5f, - 0x54, 0x45, 0x58, 0x54, 0x5f, 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52, 0x80, 0x41, 0x01, 0x22, 0x60, - 0x0a, 0x14, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x75, 0x6d, 0x70, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x75, - 0x6d, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x06, 0xe0, 0x40, 0x1c, 0xe8, 0x40, 0x02, - 0x22, 0x81, 0x01, 0x0a, 0x15, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4c, 0x6f, - 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x05, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x66, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x65, 0x6e, 0x64, - 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x3a, 0x0c, 0xe0, 0x40, 0x1d, 0xe8, 0x40, 0x01, 0xf8, 0x40, - 0x00, 0x80, 0x41, 0x00, 0x22, 0x2f, 0x0a, 0x25, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x48, 0x6f, 0x6d, 0x65, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3a, 0x06, 0xe0, - 0x40, 0x22, 0xe8, 0x40, 0x02, 0x22, 0x41, 0x0a, 0x17, 0x48, 0x6f, 0x6d, 0x65, 0x61, 0x73, 0x73, - 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x70, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x83, 0x02, 0x0a, 0x1c, 0x48, 0x6f, 0x6d, - 0x65, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x48, 0x6f, 0x6d, 0x65, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x3d, 0x0a, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x48, 0x6f, 0x6d, 0x65, 0x61, - 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, - 0x61, 0x70, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x12, 0x36, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x48, 0x6f, 0x6d, 0x65, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x52, 0x09, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x3a, 0x09, 0xe0, 0x40, 0x23, 0xe8, 0x40, 0x01, 0x80, 0x41, 0x01, 0x22, 0x2d, - 0x0a, 0x23, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x48, 0x6f, 0x6d, 0x65, 0x41, - 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x3a, 0x06, 0xe0, 0x40, 0x26, 0xe8, 0x40, 0x02, 0x22, 0x68, 0x0a, - 0x23, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x48, 0x6f, 0x6d, 0x65, 0x41, 0x73, - 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, - 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3a, - 0x06, 0xe0, 0x40, 0x27, 0xe8, 0x40, 0x01, 0x22, 0x78, 0x0a, 0x1a, 0x48, 0x6f, 0x6d, 0x65, 0x41, - 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3a, 0x09, 0xe0, 0x40, 0x28, 0xe8, 0x40, 0x02, 0x80, 0x41, - 0x01, 0x22, 0x18, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x3a, 0x06, 0xe0, 0x40, 0x24, 0xe8, 0x40, 0x00, 0x22, 0x41, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x73, 0x3a, 0x09, 0xe0, 0x40, 0x25, 0xe8, 0x40, 0x00, 0x80, 0x41, 0x01, 0x22, 0x57, - 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x0f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x72, 0x67, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x7f, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, - 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, - 0x3a, 0x06, 0xe0, 0x40, 0x29, 0xe8, 0x40, 0x01, 0x22, 0x9b, 0x02, 0x0a, 0x16, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x72, 0x67, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x13, 0x0a, 0x05, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x65, 0x67, 0x61, - 0x63, 0x79, 0x5f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x65, - 0x67, 0x61, 0x63, 0x79, 0x49, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x5f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x17, - 0x0a, 0x07, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x11, 0x0a, 0x04, 0x69, 0x6e, 0x74, 0x5f, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x03, 0x69, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0a, 0x62, 0x6f, - 0x6f, 0x6c, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x06, 0x20, 0x03, 0x28, 0x08, 0x42, 0x02, - 0x10, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x1f, 0x0a, - 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x07, 0x20, 0x03, 0x28, 0x11, - 0x42, 0x02, 0x10, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x23, - 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x02, 0x42, 0x02, 0x10, 0x00, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x41, 0x72, - 0x72, 0x61, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x72, - 0x72, 0x61, 0x79, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x41, 0x72, 0x72, 0x61, 0x79, 0x22, 0x61, 0x0a, 0x15, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x2b, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x3a, 0x09, - 0xe0, 0x40, 0x2a, 0xe8, 0x40, 0x02, 0x80, 0x41, 0x01, 0x22, 0x95, 0x02, 0x0a, 0x1a, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, - 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, - 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0f, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x3a, 0x19, 0xe0, 0x40, 0x2b, 0xe8, 0x40, 0x01, 0xf2, 0x40, - 0x10, 0x55, 0x53, 0x45, 0x5f, 0x45, 0x53, 0x50, 0x33, 0x32, 0x5f, 0x43, 0x41, 0x4d, 0x45, 0x52, - 0x41, 0x22, 0x6a, 0x0a, 0x13, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, - 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, - 0x6e, 0x65, 0x3a, 0x19, 0xe0, 0x40, 0x2c, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x10, 0x55, 0x53, 0x45, - 0x5f, 0x45, 0x53, 0x50, 0x33, 0x32, 0x5f, 0x43, 0x41, 0x4d, 0x45, 0x52, 0x41, 0x22, 0x62, 0x0a, - 0x12, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x3a, 0x1c, 0xe0, 0x40, 0x2d, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x10, 0x55, 0x53, - 0x45, 0x5f, 0x45, 0x53, 0x50, 0x33, 0x32, 0x5f, 0x43, 0x41, 0x4d, 0x45, 0x52, 0x41, 0x80, 0x41, - 0x01, 0x22, 0xc1, 0x0a, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, - 0x64, 0x12, 0x40, 0x0a, 0x1c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x12, 0x50, 0x0a, 0x25, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, - 0x74, 0x77, 0x6f, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x21, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x54, 0x77, 0x6f, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x35, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x0c, - 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0e, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, - 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x76, 0x69, - 0x73, 0x75, 0x61, 0x6c, 0x4d, 0x69, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x78, - 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x14, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x4d, 0x61, 0x78, 0x54, 0x65, 0x6d, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x43, 0x0a, 0x1e, 0x76, 0x69, 0x73, 0x75, - 0x61, 0x6c, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x1b, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, 0x65, 0x70, 0x12, 0x30, 0x0a, - 0x14, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x5f, 0x61, 0x77, 0x61, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x6c, 0x65, 0x67, - 0x61, 0x63, 0x79, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x41, 0x77, 0x61, 0x79, 0x12, - 0x27, 0x0a, 0x0f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x13, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, - 0x0d, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x46, - 0x61, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x46, 0x61, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x15, 0x73, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x77, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x61, - 0x74, 0x65, 0x53, 0x77, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x13, 0x73, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x77, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x73, - 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x66, 0x61, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x0f, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x46, 0x61, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x3b, 0x0a, - 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x74, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x61, - 0x74, 0x65, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x52, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x74, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x65, - 0x73, 0x65, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x12, 0x45, 0x0a, 0x1f, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x5f, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x15, 0x20, 0x01, 0x28, 0x02, 0x52, 0x1c, 0x76, 0x69, 0x73, - 0x75, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, 0x65, 0x70, 0x12, 0x3a, 0x0a, 0x19, 0x73, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x75, - 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x75, 0x6d, - 0x69, 0x64, 0x69, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x18, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x75, 0x6d, 0x69, 0x64, 0x69, 0x74, - 0x79, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x75, 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x12, - 0x2e, 0x0a, 0x13, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x68, 0x75, - 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x18, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x76, 0x69, - 0x73, 0x75, 0x61, 0x6c, 0x4d, 0x69, 0x6e, 0x48, 0x75, 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x12, - 0x2e, 0x0a, 0x13, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x68, 0x75, - 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x19, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x76, 0x69, - 0x73, 0x75, 0x61, 0x6c, 0x4d, 0x61, 0x78, 0x48, 0x75, 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x3a, - 0x14, 0xe0, 0x40, 0x2e, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x0b, 0x55, 0x53, 0x45, 0x5f, 0x43, 0x4c, - 0x49, 0x4d, 0x41, 0x54, 0x45, 0x22, 0xae, 0x05, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x20, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, - 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, - 0x64, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x65, - 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x12, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x65, - 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x65, 0x6d, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x14, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x6f, 0x77, 0x12, 0x36, 0x0a, 0x17, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x68, - 0x69, 0x67, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x69, 0x67, 0x68, - 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x6e, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, - 0x79, 0x5f, 0x61, 0x77, 0x61, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x75, 0x6e, - 0x75, 0x73, 0x65, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x41, 0x77, 0x61, 0x79, 0x12, 0x26, - 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, - 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x08, 0x66, 0x61, 0x6e, 0x5f, 0x6d, 0x6f, - 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x61, - 0x74, 0x65, 0x46, 0x61, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x66, 0x61, 0x6e, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x30, 0x0a, 0x0a, 0x73, 0x77, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, - 0x53, 0x77, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x73, 0x77, 0x69, 0x6e, 0x67, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x66, - 0x61, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x46, 0x61, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x0a, 0x06, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x43, - 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x52, 0x06, 0x70, 0x72, - 0x65, 0x73, 0x65, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x75, 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x75, 0x6d, 0x69, - 0x64, 0x69, 0x74, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x68, - 0x75, 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x75, 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x3a, 0x17, 0xe0, - 0x40, 0x2f, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x0b, 0x55, 0x53, 0x45, 0x5f, 0x43, 0x4c, 0x49, 0x4d, - 0x41, 0x54, 0x45, 0x80, 0x41, 0x01, 0x22, 0x9f, 0x08, 0x0a, 0x15, 0x43, 0x6c, 0x69, 0x6d, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, - 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x43, 0x6c, - 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, - 0x34, 0x0a, 0x16, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x65, - 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x14, 0x68, 0x61, 0x73, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x11, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x6c, - 0x6f, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x68, 0x61, 0x73, 0x54, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x6f, - 0x77, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x77, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x14, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x4c, 0x6f, 0x77, 0x12, 0x3d, 0x0a, 0x1b, 0x68, 0x61, 0x73, 0x5f, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x68, 0x61, - 0x73, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x48, 0x69, 0x67, 0x68, 0x12, 0x36, 0x0a, 0x17, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x68, 0x69, 0x67, - 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x69, 0x67, 0x68, 0x12, 0x33, - 0x0a, 0x16, 0x75, 0x6e, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x6c, 0x65, 0x67, - 0x61, 0x63, 0x79, 0x5f, 0x61, 0x77, 0x61, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, - 0x75, 0x6e, 0x75, 0x73, 0x65, 0x64, 0x48, 0x61, 0x73, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x41, - 0x77, 0x61, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x6e, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x6c, 0x65, - 0x67, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x77, 0x61, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x10, 0x75, 0x6e, 0x75, 0x73, 0x65, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x41, 0x77, 0x61, - 0x79, 0x12, 0x20, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x66, 0x61, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x46, 0x61, 0x6e, 0x4d, - 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x66, 0x61, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x46, - 0x61, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x66, 0x61, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, - 0x24, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x77, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x53, 0x77, 0x69, 0x6e, - 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x0a, 0x0a, 0x73, 0x77, 0x69, 0x6e, 0x67, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x43, 0x6c, 0x69, 0x6d, - 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x73, 0x77, - 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x0a, 0x13, 0x68, 0x61, 0x73, 0x5f, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x66, 0x61, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x68, 0x61, 0x73, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x46, - 0x61, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x5f, 0x66, 0x61, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x46, 0x61, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x12, 0x26, 0x0a, - 0x06, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, - 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x52, 0x06, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x68, 0x61, 0x73, 0x5f, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0f, 0x68, 0x61, 0x73, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x65, 0x73, 0x65, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x75, 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x16, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x11, 0x68, 0x61, 0x73, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x75, - 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x68, 0x75, 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x17, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x75, 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x3a, - 0x17, 0xe0, 0x40, 0x30, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x0b, 0x55, 0x53, 0x45, 0x5f, 0x43, 0x4c, - 0x49, 0x4d, 0x41, 0x54, 0x45, 0x80, 0x41, 0x01, 0x22, 0xd1, 0x03, 0x0a, 0x1a, 0x4c, 0x69, 0x73, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, - 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, - 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, - 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, - 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x6d, 0x61, 0x78, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, - 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x75, 0x6e, 0x69, 0x74, 0x4f, 0x66, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0b, 0x2e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, - 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x3a, 0x13, 0xe0, 0x40, 0x31, 0xe8, 0x40, 0x01, 0xf2, - 0x40, 0x0a, 0x55, 0x53, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x22, 0x7a, 0x0a, 0x13, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x3a, 0x16, 0xe0, 0x40, 0x32, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x0a, 0x55, 0x53, 0x45, 0x5f, 0x4e, - 0x55, 0x4d, 0x42, 0x45, 0x52, 0x80, 0x41, 0x01, 0x22, 0x56, 0x0a, 0x14, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x16, 0xe0, 0x40, 0x33, 0xe8, 0x40, 0x02, - 0xf2, 0x40, 0x0a, 0x55, 0x53, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x80, 0x41, 0x01, - 0x22, 0xa9, 0x02, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, - 0x63, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x0a, - 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x38, 0x0a, - 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, - 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, - 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x3a, 0x13, 0xe0, 0x40, 0x34, 0xe8, 0x40, 0x01, 0xf2, - 0x40, 0x0a, 0x55, 0x53, 0x45, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x22, 0x7a, 0x0a, 0x13, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x3a, 0x16, 0xe0, 0x40, 0x35, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x0a, 0x55, 0x53, 0x45, 0x5f, 0x53, - 0x45, 0x4c, 0x45, 0x43, 0x54, 0x80, 0x41, 0x01, 0x22, 0x56, 0x0a, 0x14, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x16, 0xe0, 0x40, 0x36, 0xe8, 0x40, 0x02, - 0xf2, 0x40, 0x0a, 0x55, 0x53, 0x45, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x80, 0x41, 0x01, - 0x22, 0x9b, 0x03, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, - 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, - 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x61, - 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x6f, 0x70, 0x65, - 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, - 0x64, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x63, 0x6f, 0x64, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x3a, 0x11, 0xe0, 0x40, 0x3a, - 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x08, 0x55, 0x53, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x22, 0x5d, - 0x0a, 0x11, 0x4c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x14, 0xe0, 0x40, 0x3b, 0xe8, 0x40, 0x01, 0xf2, - 0x40, 0x08, 0x55, 0x53, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x80, 0x41, 0x01, 0x22, 0x93, 0x01, - 0x0a, 0x12, 0x4c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x68, 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x68, 0x61, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x3a, 0x14, 0xe0, - 0x40, 0x3c, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x08, 0x55, 0x53, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, - 0x80, 0x41, 0x01, 0x22, 0xb2, 0x02, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x3a, 0x13, 0xe0, 0x40, 0x3d, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x0a, 0x55, 0x53, - 0x45, 0x5f, 0x42, 0x55, 0x54, 0x54, 0x4f, 0x4e, 0x22, 0x40, 0x0a, 0x14, 0x42, 0x75, 0x74, 0x74, - 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x3a, 0x16, 0xe0, 0x40, 0x3e, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x0a, 0x55, 0x53, 0x45, - 0x5f, 0x42, 0x55, 0x54, 0x54, 0x4f, 0x4e, 0x80, 0x41, 0x01, 0x22, 0xc1, 0x02, 0x0a, 0x1f, 0x4c, - 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x4d, 0x65, 0x64, 0x69, 0x61, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, - 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, - 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x25, 0x0a, 0x0e, - 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x50, 0x61, - 0x75, 0x73, 0x65, 0x3a, 0x19, 0xe0, 0x40, 0x3f, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x10, 0x55, 0x53, - 0x45, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x22, 0xa1, - 0x01, 0x0a, 0x18, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x4d, - 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6d, - 0x75, 0x74, 0x65, 0x64, 0x3a, 0x1c, 0xe0, 0x40, 0x40, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x10, 0x55, - 0x53, 0x45, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x80, - 0x41, 0x01, 0x22, 0xe2, 0x02, 0x0a, 0x19, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x12, 0x2d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x68, 0x61, 0x73, - 0x5f, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0b, 0x68, 0x61, 0x73, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, - 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x55, 0x72, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x68, 0x61, - 0x73, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x68, 0x61, 0x73, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6e, 0x6e, - 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x1c, 0xe0, 0x40, 0x41, 0xe8, 0x40, - 0x02, 0xf2, 0x40, 0x10, 0x55, 0x53, 0x45, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x80, 0x41, 0x01, 0x22, 0x5f, 0x0a, 0x29, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x4c, 0x45, 0x41, - 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x1c, 0xe0, 0x40, 0x42, 0xe8, - 0x40, 0x02, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, - 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, 0x63, 0x0a, 0x14, 0x42, 0x6c, 0x75, 0x65, - 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x75, 0x75, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0b, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x6c, - 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xcb, 0x02, - 0x0a, 0x20, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x4c, 0x45, 0x41, 0x64, 0x76, - 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73, 0x73, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x52, 0x04, - 0x72, 0x73, 0x73, 0x69, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x75, 0x75, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x55, 0x75, 0x69, 0x64, 0x73, 0x12, 0x38, 0x0a, 0x0c, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x11, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x10, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x1f, 0xe0, 0x40, 0x43, 0xe8, - 0x40, 0x01, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, - 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x80, 0x41, 0x01, 0x22, 0x82, 0x01, 0x0a, 0x1b, - 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x4c, 0x45, 0x52, 0x61, 0x77, 0x41, 0x64, - 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73, 0x73, 0x69, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x11, 0x52, 0x04, 0x72, 0x73, 0x73, 0x69, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x8d, 0x01, 0x0a, 0x24, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x4c, 0x45, - 0x52, 0x61, 0x77, 0x41, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0e, 0x61, 0x64, 0x76, - 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x4c, 0x45, 0x52, - 0x61, 0x77, 0x41, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x0e, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, - 0x1f, 0xe0, 0x40, 0x5d, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, - 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x80, 0x41, 0x01, - 0x22, 0xdd, 0x01, 0x0a, 0x16, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3e, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x42, 0x6c, - 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x61, 0x73, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x68, 0x61, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x79, - 0x70, 0x65, 0x3a, 0x1c, 0xe0, 0x40, 0x44, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, - 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, - 0x22, 0xa1, 0x01, 0x0a, 0x21, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x1c, 0xe0, 0x40, 0x45, 0xe8, 0x40, 0x01, 0xf2, 0x40, - 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, - 0x52, 0x4f, 0x58, 0x59, 0x22, 0x59, 0x0a, 0x1f, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, - 0x68, 0x47, 0x41, 0x54, 0x54, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x3a, 0x1c, 0xe0, 0x40, 0x46, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, - 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, - 0x45, 0x0a, 0x17, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, - 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x1b, 0x42, 0x6c, 0x75, 0x65, 0x74, - 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, - 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x04, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, - 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x61, 0x6e, 0x64, - 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, - 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x8a, - 0x01, 0x0a, 0x14, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x68, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x61, 0x6e, - 0x64, 0x6c, 0x65, 0x12, 0x46, 0x0a, 0x0f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, - 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x42, - 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x43, 0x68, 0x61, 0x72, - 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0f, 0x63, 0x68, 0x61, 0x72, - 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x20, - 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x47, 0x65, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x31, 0x0a, 0x08, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x42, - 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3a, 0x1c, 0xe0, - 0x40, 0x47, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, - 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, 0x5e, 0x0a, 0x24, 0x42, - 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x47, 0x65, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x44, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x1c, 0xe0, - 0x40, 0x48, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, - 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, 0x6a, 0x0a, 0x18, 0x42, - 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x52, 0x65, 0x61, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x1c, 0xe0, 0x40, 0x49, 0xe8, 0x40, - 0x02, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, - 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, 0x7f, 0x0a, 0x19, 0x42, 0x6c, 0x75, 0x65, 0x74, - 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, - 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x1c, 0xe0, 0x40, 0x4a, 0xe8, - 0x40, 0x01, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, - 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, 0x9b, 0x01, 0x0a, 0x19, 0x42, 0x6c, 0x75, - 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x1c, 0xe0, 0x40, 0x4b, 0xe8, 0x40, 0x02, - 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, - 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, 0x74, 0x0a, 0x22, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, - 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x52, 0x65, 0x61, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x1c, - 0xe0, 0x40, 0x4c, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, - 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, 0x89, 0x01, 0x0a, - 0x23, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, - 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x1c, 0xe0, 0x40, 0x4d, 0xe8, - 0x40, 0x02, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, - 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, 0x84, 0x01, 0x0a, 0x1a, 0x42, 0x6c, 0x75, - 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x3a, 0x1c, 0xe0, 0x40, 0x4e, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, - 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, - 0x85, 0x01, 0x0a, 0x1f, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, - 0x54, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x1c, 0xe0, 0x40, 0x4f, 0xe8, 0x40, - 0x01, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, - 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, 0x48, 0x0a, 0x28, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x3a, 0x1c, 0xe0, 0x40, 0x50, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x13, 0x55, 0x53, - 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, - 0x59, 0x22, 0x6a, 0x0a, 0x20, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x65, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x04, 0x66, 0x72, 0x65, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x3a, - 0x1c, 0xe0, 0x40, 0x51, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, - 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, 0x82, 0x01, - 0x0a, 0x1a, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x1c, 0xe0, 0x40, 0x52, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x13, 0x55, - 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, - 0x58, 0x59, 0x22, 0x6c, 0x0a, 0x1a, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, - 0x41, 0x54, 0x54, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, - 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x61, 0x6e, 0x64, - 0x6c, 0x65, 0x3a, 0x1c, 0xe0, 0x40, 0x53, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, - 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, - 0x22, 0x6d, 0x0a, 0x1b, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, - 0x54, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, 0x6e, - 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, - 0x65, 0x3a, 0x1c, 0xe0, 0x40, 0x54, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, - 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, - 0x86, 0x01, 0x0a, 0x1e, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x50, 0x61, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x70, 0x61, 0x69, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x61, - 0x69, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x1c, 0xe0, 0x40, 0x55, 0xe8, - 0x40, 0x01, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, - 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, 0x8a, 0x01, 0x0a, 0x20, 0x42, 0x6c, 0x75, - 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x70, 0x61, - 0x69, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x1c, 0xe0, 0x40, 0x56, 0xe8, 0x40, 0x01, 0xf2, - 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, - 0x50, 0x52, 0x4f, 0x58, 0x59, 0x22, 0x4b, 0x0a, 0x2b, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x4c, 0x45, 0x41, - 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x3a, 0x1c, 0xe0, 0x40, 0x57, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x13, 0x55, - 0x53, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, - 0x58, 0x59, 0x22, 0x8b, 0x01, 0x0a, 0x21, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x3a, 0x1c, 0xe0, 0x40, 0x58, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, - 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, - 0x22, 0x72, 0x0a, 0x1e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x56, 0x6f, 0x69, - 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x3a, 0x1c, 0xe0, 0x40, 0x59, 0xe8, 0x40, 0x02, 0xf2, 0x40, - 0x13, 0x55, 0x53, 0x45, 0x5f, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, - 0x54, 0x41, 0x4e, 0x54, 0x22, 0x9f, 0x01, 0x0a, 0x1b, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x41, 0x73, - 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x6e, 0x6f, 0x69, 0x73, 0x65, 0x5f, 0x73, 0x75, - 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x6e, 0x6f, 0x69, 0x73, 0x65, 0x53, 0x75, 0x70, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1b, 0x0a, 0x09, - 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x67, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x08, 0x61, 0x75, 0x74, 0x6f, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x22, 0xf9, 0x01, 0x0a, 0x15, 0x56, 0x6f, 0x69, 0x63, 0x65, - 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x43, 0x0a, 0x0e, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x73, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x56, 0x6f, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x41, 0x75, - 0x64, 0x69, 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0d, 0x61, 0x75, 0x64, - 0x69, 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x61, - 0x6b, 0x65, 0x5f, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x77, 0x61, 0x6b, 0x65, 0x57, 0x6f, 0x72, 0x64, 0x50, 0x68, - 0x72, 0x61, 0x73, 0x65, 0x3a, 0x1c, 0xe0, 0x40, 0x5a, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x13, 0x55, - 0x53, 0x45, 0x5f, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, - 0x4e, 0x54, 0x22, 0x60, 0x0a, 0x16, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x73, - 0x74, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x1c, 0xe0, 0x40, 0x5b, 0xe8, 0x40, 0x02, 0xf2, 0x40, - 0x13, 0x55, 0x53, 0x45, 0x5f, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, - 0x54, 0x41, 0x4e, 0x54, 0x22, 0x43, 0x0a, 0x17, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, - 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x1b, 0x56, 0x6f, - 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, - 0x56, 0x6f, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2c, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x56, - 0x6f, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x1c, 0xe0, 0x40, - 0x5c, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x56, 0x4f, 0x49, 0x43, 0x45, - 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x22, 0x59, 0x0a, 0x13, 0x56, 0x6f, - 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x41, 0x75, 0x64, 0x69, - 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x3a, 0x1c, 0xe0, 0x40, 0x6a, 0xe8, 0x40, 0x00, 0xf2, - 0x40, 0x13, 0x55, 0x53, 0x45, 0x5f, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, - 0x53, 0x54, 0x41, 0x4e, 0x54, 0x22, 0xac, 0x03, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x50, 0x61, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, - 0x63, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, - 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x2d, 0x0a, - 0x12, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x2f, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x72, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x11, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x41, - 0x72, 0x6d, 0x3a, 0x20, 0xe0, 0x40, 0x5e, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x17, 0x55, 0x53, 0x45, - 0x5f, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, - 0x41, 0x4e, 0x45, 0x4c, 0x22, 0x86, 0x01, 0x0a, 0x1e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x61, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x61, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x23, 0xe0, 0x40, 0x5f, 0xe8, 0x40, 0x01, - 0xf2, 0x40, 0x17, 0x55, 0x53, 0x45, 0x5f, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x43, 0x4f, 0x4e, - 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x41, 0x4e, 0x45, 0x4c, 0x80, 0x41, 0x01, 0x22, 0xa6, 0x01, - 0x0a, 0x1f, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x61, - 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x50, 0x61, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x3a, 0x23, 0xe0, 0x40, 0x60, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x17, 0x55, 0x53, 0x45, 0x5f, - 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x41, - 0x4e, 0x45, 0x4c, 0x80, 0x41, 0x01, 0x22, 0x82, 0x03, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x54, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, - 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, - 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, - 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, - 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1d, 0x0a, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x4d, 0x6f, - 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x3a, 0x11, 0xe0, 0x40, 0x61, 0xe8, 0x40, 0x01, - 0xf2, 0x40, 0x08, 0x55, 0x53, 0x45, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x22, 0x76, 0x0a, 0x11, 0x54, - 0x65, 0x78, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x14, 0xe0, - 0x40, 0x62, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x08, 0x55, 0x53, 0x45, 0x5f, 0x54, 0x45, 0x58, 0x54, - 0x80, 0x41, 0x01, 0x22, 0x52, 0x0a, 0x12, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x3a, 0x14, 0xe0, 0x40, 0x63, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x08, 0x55, 0x53, 0x45, 0x5f, - 0x54, 0x45, 0x58, 0x54, 0x80, 0x41, 0x01, 0x22, 0x94, 0x02, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, - 0x75, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, - 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x3a, 0x1a, 0xe0, 0x40, 0x64, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x11, 0x55, 0x53, 0x45, - 0x5f, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x45, 0x22, 0xa5, - 0x01, 0x0a, 0x11, 0x44, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, - 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, - 0x65, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x79, 0x65, 0x61, 0x72, 0x12, - 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x03, 0x64, 0x61, 0x79, 0x3a, 0x1d, 0xe0, 0x40, 0x65, 0xe8, 0x40, 0x01, 0xf2, - 0x40, 0x11, 0x55, 0x53, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x44, - 0x41, 0x54, 0x45, 0x80, 0x41, 0x01, 0x22, 0x81, 0x01, 0x0a, 0x12, 0x44, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x79, - 0x65, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x64, 0x61, 0x79, 0x3a, 0x1d, 0xe0, 0x40, 0x66, - 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x11, 0x55, 0x53, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, - 0x4d, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x45, 0x80, 0x41, 0x01, 0x22, 0x94, 0x02, 0x0a, 0x18, 0x4c, - 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, - 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, - 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x64, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x3a, 0x1a, 0xe0, 0x40, 0x67, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x11, - 0x55, 0x53, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x54, 0x49, 0x4d, - 0x45, 0x22, 0xad, 0x01, 0x0a, 0x11, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x68, 0x6f, - 0x75, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x3a, 0x1d, 0xe0, 0x40, 0x68, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x11, 0x55, 0x53, 0x45, - 0x5f, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x80, 0x41, - 0x01, 0x22, 0x89, 0x01, 0x0a, 0x12, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, - 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x12, 0x16, - 0x0a, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, - 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x3a, 0x1d, - 0xe0, 0x40, 0x69, 0xe8, 0x40, 0x02, 0xf2, 0x40, 0x11, 0x55, 0x53, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x45, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x80, 0x41, 0x01, 0x22, 0xd1, 0x02, - 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x69, - 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, - 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, - 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x12, 0xe0, - 0x40, 0x6b, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x09, 0x55, 0x53, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, - 0x54, 0x22, 0x54, 0x0a, 0x0d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x3a, 0x12, 0xe0, 0x40, 0x6c, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x09, 0x55, 0x53, - 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x22, 0xa7, 0x03, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, - 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x52, 0x0e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, - 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, - 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x53, 0x74, 0x6f, 0x70, 0x3a, 0x12, 0xe0, - 0x40, 0x6d, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x09, 0x55, 0x53, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x56, - 0x45, 0x22, 0x97, 0x01, 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0f, 0x2e, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x15, 0xe0, 0x40, 0x6e, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x09, 0x55, - 0x53, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x56, 0x45, 0x80, 0x41, 0x01, 0x22, 0x91, 0x01, 0x0a, 0x13, - 0x56, 0x61, 0x6c, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x61, 0x73, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x3a, 0x15, 0xe0, 0x40, 0x6f, 0xe8, 0x40, 0x02, - 0xf2, 0x40, 0x09, 0x55, 0x53, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x56, 0x45, 0x80, 0x41, 0x01, 0x22, - 0x9c, 0x02, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, - 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0e, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x3a, 0x1e, - 0xe0, 0x40, 0x70, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x15, 0x55, 0x53, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x45, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x22, 0x96, - 0x01, 0x0a, 0x15, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x53, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x73, 0x3a, 0x21, 0xe0, 0x40, 0x71, 0xe8, 0x40, 0x01, 0xf2, 0x40, 0x15, 0x55, - 0x53, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x45, - 0x54, 0x49, 0x4d, 0x45, 0x80, 0x41, 0x01, 0x22, 0x72, 0x0a, 0x16, 0x44, 0x61, 0x74, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x65, 0x70, 0x6f, 0x63, - 0x68, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x3a, 0x21, 0xe0, 0x40, 0x72, 0xe8, 0x40, 0x02, - 0xf2, 0x40, 0x15, 0x55, 0x53, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x5f, - 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x80, 0x41, 0x01, 0x2a, 0x66, 0x0a, 0x0e, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, - 0x14, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, - 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x4e, 0x54, 0x49, 0x54, - 0x59, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, - 0x47, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x41, - 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x44, 0x49, 0x41, 0x47, 0x4e, 0x4f, 0x53, 0x54, 0x49, - 0x43, 0x10, 0x02, 0x2a, 0x4e, 0x0a, 0x10, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, 0x6f, 0x76, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x4c, 0x45, 0x47, 0x41, 0x43, - 0x59, 0x5f, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x50, - 0x45, 0x4e, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, - 0x44, 0x10, 0x01, 0x2a, 0x6a, 0x0a, 0x0e, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x4f, - 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x00, 0x12, - 0x1e, 0x0a, 0x1a, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x49, 0x53, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, - 0x1e, 0x0a, 0x1a, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x49, 0x53, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x2a, - 0x72, 0x0a, 0x12, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x19, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, - 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x4f, 0x50, - 0x45, 0x4e, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x43, 0x4c, 0x4f, - 0x53, 0x45, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x4f, - 0x50, 0x10, 0x02, 0x2a, 0x47, 0x0a, 0x08, 0x46, 0x61, 0x6e, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, - 0x11, 0x0a, 0x0d, 0x46, 0x41, 0x4e, 0x5f, 0x53, 0x50, 0x45, 0x45, 0x44, 0x5f, 0x4c, 0x4f, 0x57, - 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x41, 0x4e, 0x5f, 0x53, 0x50, 0x45, 0x45, 0x44, 0x5f, - 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x46, 0x41, 0x4e, 0x5f, - 0x53, 0x50, 0x45, 0x45, 0x44, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x10, 0x02, 0x2a, 0x44, 0x0a, 0x0c, - 0x46, 0x61, 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15, - 0x46, 0x41, 0x4e, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x4f, - 0x52, 0x57, 0x41, 0x52, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x41, 0x4e, 0x5f, 0x44, - 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, - 0x10, 0x01, 0x2a, 0xa5, 0x02, 0x0a, 0x09, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, - 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4c, 0x4f, - 0x52, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4f, 0x4e, 0x5f, 0x4f, 0x46, 0x46, 0x10, 0x01, 0x12, - 0x19, 0x0a, 0x15, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x52, - 0x49, 0x47, 0x48, 0x54, 0x4e, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, - 0x4c, 0x4f, 0x52, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x57, 0x48, 0x49, 0x54, 0x45, 0x10, 0x07, - 0x12, 0x20, 0x0a, 0x1c, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, - 0x4f, 0x4c, 0x4f, 0x52, 0x5f, 0x54, 0x45, 0x4d, 0x50, 0x45, 0x52, 0x41, 0x54, 0x55, 0x52, 0x45, - 0x10, 0x0b, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f, 0x4d, 0x4f, 0x44, 0x45, - 0x5f, 0x43, 0x4f, 0x4c, 0x44, 0x5f, 0x57, 0x41, 0x52, 0x4d, 0x5f, 0x57, 0x48, 0x49, 0x54, 0x45, - 0x10, 0x13, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f, 0x4d, 0x4f, 0x44, 0x45, - 0x5f, 0x52, 0x47, 0x42, 0x10, 0x23, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f, - 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x47, 0x42, 0x5f, 0x57, 0x48, 0x49, 0x54, 0x45, 0x10, 0x27, - 0x12, 0x24, 0x0a, 0x20, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, - 0x47, 0x42, 0x5f, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f, 0x54, 0x45, 0x4d, 0x50, 0x45, 0x52, 0x41, - 0x54, 0x55, 0x52, 0x45, 0x10, 0x2f, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f, - 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x47, 0x42, 0x5f, 0x43, 0x4f, 0x4c, 0x44, 0x5f, 0x57, 0x41, - 0x52, 0x4d, 0x5f, 0x57, 0x48, 0x49, 0x54, 0x45, 0x10, 0x33, 0x2a, 0x7e, 0x0a, 0x10, 0x53, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x14, - 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x4e, 0x4f, - 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4c, - 0x41, 0x53, 0x53, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x10, - 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, - 0x5f, 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x41, 0x53, 0x49, 0x4e, - 0x47, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4c, 0x41, - 0x53, 0x53, 0x5f, 0x54, 0x4f, 0x54, 0x41, 0x4c, 0x10, 0x03, 0x2a, 0x55, 0x0a, 0x13, 0x53, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x5f, - 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x52, - 0x45, 0x53, 0x45, 0x54, 0x5f, 0x4e, 0x45, 0x56, 0x45, 0x52, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, - 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x10, - 0x02, 0x2a, 0xb9, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, - 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, - 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, - 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, - 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x4c, - 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x03, 0x12, - 0x14, 0x0a, 0x10, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x43, 0x4f, 0x4e, - 0x46, 0x49, 0x47, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, - 0x45, 0x4c, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x4f, - 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x56, 0x45, 0x52, 0x42, 0x4f, 0x53, 0x45, 0x10, - 0x06, 0x12, 0x1a, 0x0a, 0x16, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x56, - 0x45, 0x52, 0x59, 0x5f, 0x56, 0x45, 0x52, 0x42, 0x4f, 0x53, 0x45, 0x10, 0x07, 0x2a, 0x84, 0x02, - 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x72, 0x67, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x52, 0x47, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, - 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x52, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x49, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, - 0x5f, 0x41, 0x52, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, - 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x52, 0x47, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1f, - 0x0a, 0x1b, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x52, 0x47, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x5f, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x04, 0x12, - 0x1e, 0x0a, 0x1a, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x52, 0x47, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x5f, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x05, 0x12, - 0x20, 0x0a, 0x1c, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x52, 0x47, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, - 0x06, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x52, 0x47, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x52, 0x52, - 0x41, 0x59, 0x10, 0x07, 0x2a, 0xb5, 0x01, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, - 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4f, 0x46, 0x46, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4c, - 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, 0x45, 0x41, 0x54, 0x5f, - 0x43, 0x4f, 0x4f, 0x4c, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, - 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x4f, 0x4f, 0x4c, 0x10, 0x02, 0x12, 0x15, 0x0a, - 0x11, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, 0x45, - 0x41, 0x54, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, - 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x46, 0x41, 0x4e, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x04, 0x12, - 0x14, 0x0a, 0x10, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, - 0x44, 0x52, 0x59, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, - 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x06, 0x2a, 0xf1, 0x01, 0x0a, - 0x0e, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x46, 0x61, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, - 0x12, 0x0a, 0x0e, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x4e, 0x5f, 0x4f, - 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x46, - 0x41, 0x4e, 0x5f, 0x4f, 0x46, 0x46, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4c, 0x49, 0x4d, - 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x4e, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x02, 0x12, 0x13, - 0x0a, 0x0f, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x4e, 0x5f, 0x4c, 0x4f, - 0x57, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x46, - 0x41, 0x4e, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x43, - 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x4e, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x10, - 0x05, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x4e, - 0x5f, 0x4d, 0x49, 0x44, 0x44, 0x4c, 0x45, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4c, 0x49, - 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x4e, 0x5f, 0x46, 0x4f, 0x43, 0x55, 0x53, 0x10, 0x07, - 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x4e, 0x5f, - 0x44, 0x49, 0x46, 0x46, 0x55, 0x53, 0x45, 0x10, 0x08, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4c, 0x49, - 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x4e, 0x5f, 0x51, 0x55, 0x49, 0x45, 0x54, 0x10, 0x09, - 0x2a, 0x7b, 0x0a, 0x10, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x6e, 0x67, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, - 0x53, 0x57, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x46, 0x46, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, - 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x4f, 0x54, - 0x48, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x53, - 0x57, 0x49, 0x4e, 0x47, 0x5f, 0x56, 0x45, 0x52, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x10, 0x02, 0x12, - 0x1c, 0x0a, 0x18, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x4e, 0x47, - 0x5f, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x10, 0x03, 0x2a, 0xab, 0x01, - 0x0a, 0x0d, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x0a, 0x12, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x4f, 0x46, 0x46, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4c, 0x49, 0x4d, 0x41, - 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4f, 0x4c, 0x49, 0x4e, - 0x47, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x41, - 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, - 0x17, 0x0a, 0x13, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x04, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x4c, 0x49, 0x4d, - 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x52, 0x59, 0x49, 0x4e, - 0x47, 0x10, 0x05, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x41, - 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x4e, 0x10, 0x06, 0x2a, 0xdf, 0x01, 0x0a, 0x0d, - 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x12, 0x17, 0x0a, - 0x13, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x54, 0x5f, - 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, - 0x45, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x10, 0x01, 0x12, - 0x17, 0x0a, 0x13, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, - 0x54, 0x5f, 0x41, 0x57, 0x41, 0x59, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4c, 0x49, 0x4d, - 0x41, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x42, 0x4f, 0x4f, 0x53, 0x54, - 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x52, - 0x45, 0x53, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x46, 0x4f, 0x52, 0x54, 0x10, 0x04, 0x12, 0x16, - 0x0a, 0x12, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x54, - 0x5f, 0x45, 0x43, 0x4f, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, - 0x45, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x53, 0x4c, 0x45, 0x45, 0x50, 0x10, 0x06, - 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4c, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x53, - 0x45, 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59, 0x10, 0x07, 0x2a, 0x4f, 0x0a, - 0x0a, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4e, - 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x10, - 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x4d, 0x4f, 0x44, 0x45, - 0x5f, 0x42, 0x4f, 0x58, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, - 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x4c, 0x49, 0x44, 0x45, 0x52, 0x10, 0x02, 0x2a, 0x99, - 0x01, 0x0a, 0x09, 0x4c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x13, 0x0a, 0x0f, - 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, - 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x4f, 0x43, 0x4b, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, - 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x4a, 0x41, 0x4d, 0x4d, 0x45, 0x44, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x4c, 0x4f, 0x43, 0x4b, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x49, 0x4e, 0x47, 0x10, 0x04, - 0x12, 0x18, 0x0a, 0x14, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, - 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x2a, 0x3c, 0x0a, 0x0b, 0x4c, 0x6f, - 0x63, 0x6b, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x4f, 0x43, - 0x4b, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, - 0x43, 0x4b, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x43, - 0x4b, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x10, 0x02, 0x2a, 0x8b, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x64, - 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, - 0x17, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x45, - 0x44, 0x49, 0x41, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x4d, 0x45, 0x44, 0x49, 0x41, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x4d, 0x45, 0x44, 0x49, 0x41, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x41, - 0x55, 0x53, 0x45, 0x44, 0x10, 0x03, 0x2a, 0xb2, 0x01, 0x0a, 0x12, 0x4d, 0x65, 0x64, 0x69, 0x61, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1d, 0x0a, - 0x19, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x43, 0x4f, - 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, - 0x4d, 0x45, 0x44, 0x49, 0x41, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4d, - 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x55, 0x53, 0x45, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, - 0x4d, 0x45, 0x44, 0x49, 0x41, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4d, - 0x4d, 0x41, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x4d, - 0x45, 0x44, 0x49, 0x41, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, - 0x41, 0x4e, 0x44, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x4d, 0x45, - 0x44, 0x49, 0x41, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, - 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x04, 0x2a, 0xeb, 0x02, 0x0a, 0x1a, - 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x25, 0x42, 0x4c, - 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x52, - 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, - 0x45, 0x43, 0x54, 0x10, 0x00, 0x12, 0x2c, 0x0a, 0x28, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, - 0x54, 0x48, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, - 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, - 0x54, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, - 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x10, 0x02, 0x12, 0x28, 0x0a, 0x24, 0x42, - 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, - 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x50, - 0x41, 0x49, 0x52, 0x10, 0x03, 0x12, 0x37, 0x0a, 0x33, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, - 0x54, 0x48, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, - 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x5f, 0x56, - 0x33, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x04, 0x12, 0x3a, - 0x0a, 0x36, 0x42, 0x4c, 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x44, 0x45, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x5f, 0x56, 0x33, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x4f, - 0x55, 0x54, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x05, 0x12, 0x2d, 0x0a, 0x29, 0x42, 0x4c, - 0x55, 0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x52, - 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x45, 0x41, - 0x52, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x06, 0x2a, 0x6a, 0x0a, 0x1b, 0x56, 0x6f, 0x69, - 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x22, 0x0a, 0x1e, 0x56, 0x4f, 0x49, 0x43, - 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x53, 0x55, 0x42, 0x53, - 0x43, 0x52, 0x49, 0x42, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x27, 0x0a, 0x23, - 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, - 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x41, 0x55, - 0x44, 0x49, 0x4f, 0x10, 0x01, 0x2a, 0x8d, 0x01, 0x0a, 0x19, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x41, - 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x20, 0x0a, 0x1c, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, - 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x4e, - 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, - 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, - 0x5f, 0x55, 0x53, 0x45, 0x5f, 0x56, 0x41, 0x44, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x56, 0x4f, - 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, - 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x5f, 0x57, 0x41, 0x4b, 0x45, 0x5f, 0x57, - 0x4f, 0x52, 0x44, 0x10, 0x02, 0x2a, 0xfc, 0x03, 0x0a, 0x13, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x41, - 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, - 0x15, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, - 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x56, 0x4f, 0x49, 0x43, - 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x5f, - 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x4f, 0x49, 0x43, 0x45, - 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x45, - 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, - 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, - 0x54, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, - 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x54, 0x5f, 0x45, 0x4e, 0x44, 0x10, 0x04, - 0x12, 0x20, 0x0a, 0x1c, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, - 0x41, 0x4e, 0x54, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, - 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, - 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x45, 0x4e, 0x44, - 0x10, 0x06, 0x12, 0x1d, 0x0a, 0x19, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, - 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x54, 0x54, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, - 0x07, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, - 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x54, 0x54, 0x53, 0x5f, 0x45, 0x4e, 0x44, 0x10, 0x08, 0x12, 0x23, - 0x0a, 0x1f, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, - 0x54, 0x5f, 0x57, 0x41, 0x4b, 0x45, 0x5f, 0x57, 0x4f, 0x52, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x52, - 0x54, 0x10, 0x09, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, - 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x57, 0x41, 0x4b, 0x45, 0x5f, 0x57, 0x4f, 0x52, 0x44, - 0x5f, 0x45, 0x4e, 0x44, 0x10, 0x0a, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, - 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x54, 0x5f, 0x56, 0x41, - 0x44, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x0b, 0x12, 0x1f, 0x0a, 0x1b, 0x56, 0x4f, 0x49, - 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x54, - 0x5f, 0x56, 0x41, 0x44, 0x5f, 0x45, 0x4e, 0x44, 0x10, 0x0c, 0x12, 0x24, 0x0a, 0x20, 0x56, 0x4f, - 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, 0x54, 0x54, - 0x53, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x62, - 0x12, 0x22, 0x0a, 0x1e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, - 0x41, 0x4e, 0x54, 0x5f, 0x54, 0x54, 0x53, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x45, - 0x4e, 0x44, 0x10, 0x63, 0x2a, 0xb3, 0x02, 0x0a, 0x16, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x61, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x18, 0x0a, 0x14, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, - 0x49, 0x53, 0x41, 0x52, 0x4d, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x4c, 0x41, - 0x52, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x48, - 0x4f, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x41, 0x57, 0x41, 0x59, 0x10, - 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x41, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x4e, 0x49, 0x47, 0x48, 0x54, 0x10, 0x03, 0x12, 0x1e, - 0x0a, 0x1a, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x52, - 0x4d, 0x45, 0x44, 0x5f, 0x56, 0x41, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, 0x23, - 0x0a, 0x1f, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x52, - 0x4d, 0x45, 0x44, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x42, 0x59, 0x50, 0x41, 0x53, - 0x53, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x16, 0x0a, 0x12, - 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x52, 0x4d, 0x49, - 0x4e, 0x47, 0x10, 0x07, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x52, 0x4d, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, - 0x19, 0x0a, 0x15, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x54, - 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x45, 0x44, 0x10, 0x09, 0x2a, 0x98, 0x02, 0x0a, 0x1d, 0x41, - 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x61, 0x6e, 0x65, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x1a, - 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x41, - 0x4e, 0x45, 0x4c, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x52, 0x4d, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, - 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x41, - 0x4e, 0x45, 0x4c, 0x5f, 0x41, 0x52, 0x4d, 0x5f, 0x41, 0x57, 0x41, 0x59, 0x10, 0x01, 0x12, 0x20, - 0x0a, 0x1c, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, - 0x50, 0x41, 0x4e, 0x45, 0x4c, 0x5f, 0x41, 0x52, 0x4d, 0x5f, 0x48, 0x4f, 0x4d, 0x45, 0x10, 0x02, - 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, - 0x4c, 0x5f, 0x50, 0x41, 0x4e, 0x45, 0x4c, 0x5f, 0x41, 0x52, 0x4d, 0x5f, 0x4e, 0x49, 0x47, 0x48, - 0x54, 0x10, 0x03, 0x12, 0x24, 0x0a, 0x20, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x43, 0x4f, 0x4e, - 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x41, 0x4e, 0x45, 0x4c, 0x5f, 0x41, 0x52, 0x4d, 0x5f, 0x56, - 0x41, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, 0x29, 0x0a, 0x25, 0x41, 0x4c, 0x41, - 0x52, 0x4d, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x41, 0x4e, 0x45, 0x4c, - 0x5f, 0x41, 0x52, 0x4d, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x42, 0x59, 0x50, 0x41, - 0x53, 0x53, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x4c, 0x41, 0x52, 0x4d, 0x5f, 0x43, 0x4f, - 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x41, 0x4e, 0x45, 0x4c, 0x5f, 0x54, 0x52, 0x49, 0x47, - 0x47, 0x45, 0x52, 0x10, 0x06, 0x2a, 0x36, 0x0a, 0x08, 0x54, 0x65, 0x78, 0x74, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x54, - 0x45, 0x58, 0x54, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x4d, 0x4f, - 0x44, 0x45, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x01, 0x2a, 0x6a, 0x0a, - 0x0e, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x18, 0x0a, 0x14, 0x56, 0x41, 0x4c, 0x56, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x56, 0x41, 0x4c, - 0x56, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x53, 0x5f, - 0x4f, 0x50, 0x45, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x56, 0x41, 0x4c, - 0x56, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x53, 0x5f, - 0x43, 0x4c, 0x4f, 0x53, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x32, 0x80, 0x13, 0x0a, 0x0d, 0x41, 0x50, - 0x49, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x05, 0x68, - 0x65, 0x6c, 0x6c, 0x6f, 0x12, 0x0d, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x06, 0xf0, 0x40, 0x00, 0xf8, 0x40, 0x00, 0x12, 0x34, 0x0a, 0x07, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x0f, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xf0, 0x40, 0x00, 0xf8, 0x40, - 0x00, 0x12, 0x3d, 0x0a, 0x0a, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, - 0x12, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xf0, 0x40, 0x00, 0xf8, 0x40, 0x00, - 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0c, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xf0, 0x40, 0x00, 0xf8, 0x40, 0x00, 0x12, 0x3b, 0x0a, - 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x2e, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x13, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0xf8, 0x40, 0x00, 0x12, 0x2e, 0x0a, 0x0d, 0x6c, 0x69, - 0x73, 0x74, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x14, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x10, 0x73, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x17, - 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, - 0x12, 0x30, 0x0a, 0x0e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x5f, 0x6c, 0x6f, - 0x67, 0x73, 0x12, 0x15, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x4c, 0x6f, - 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, - 0x22, 0x00, 0x12, 0x53, 0x0a, 0x20, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x5f, - 0x68, 0x6f, 0x6d, 0x65, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x48, 0x6f, 0x6d, 0x65, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, - 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x1f, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x5f, 0x68, 0x6f, 0x6d, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x48, 0x6f, 0x6d, 0x65, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x08, 0x67, 0x65, 0x74, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x0f, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0xf8, 0x40, 0x00, 0x12, 0x32, 0x0a, - 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x16, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, - 0x00, 0x12, 0x2e, 0x0a, 0x0d, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x12, 0x14, 0x2e, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, - 0x00, 0x12, 0x2a, 0x0a, 0x0b, 0x66, 0x61, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x12, 0x12, 0x2e, 0x46, 0x61, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, 0x2e, 0x0a, - 0x0d, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x14, - 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, 0x30, 0x0a, - 0x0e, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, - 0x15, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, - 0x2c, 0x0a, 0x0c, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, - 0x13, 0x2e, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, 0x32, 0x0a, - 0x0f, 0x63, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x12, 0x16, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, - 0x00, 0x12, 0x30, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x12, 0x15, 0x2e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, - 0x64, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x0c, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x12, 0x13, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, - 0x00, 0x12, 0x30, 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x12, 0x15, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, - 0x64, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x0e, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x15, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, - 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x0c, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x13, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, - 0x64, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x14, 0x2e, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, - 0x64, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x14, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x5f, 0x70, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1a, 0x2e, 0x4d, 0x65, - 0x64, 0x69, 0x61, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, - 0x12, 0x2c, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x12, 0x13, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, 0x2c, - 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x13, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x10, - 0x64, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x12, 0x17, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, - 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x25, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x5f, - 0x62, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x5f, 0x61, 0x64, 0x76, - 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, - 0x4c, 0x45, 0x41, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, - 0x12, 0x3c, 0x0a, 0x18, 0x62, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x5f, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x2e, 0x42, - 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, 0x48, - 0x0a, 0x1b, 0x62, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x5f, 0x67, 0x61, 0x74, 0x74, - 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x20, 0x2e, - 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x47, 0x65, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x13, 0x62, 0x6c, 0x75, 0x65, - 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x5f, 0x67, 0x61, 0x74, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x12, - 0x19, 0x2e, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x52, - 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, - 0x64, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x14, 0x62, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, - 0x5f, 0x67, 0x61, 0x74, 0x74, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x42, 0x6c, - 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, - 0x12, 0x4e, 0x0a, 0x1e, 0x62, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x5f, 0x67, 0x61, - 0x74, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x6f, 0x72, 0x12, 0x23, 0x2e, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, - 0x54, 0x54, 0x52, 0x65, 0x61, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, - 0x12, 0x50, 0x0a, 0x1f, 0x62, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x5f, 0x67, 0x61, - 0x74, 0x74, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x6f, 0x72, 0x12, 0x24, 0x2e, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, - 0x41, 0x54, 0x54, 0x57, 0x72, 0x69, 0x74, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, - 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x15, 0x62, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x5f, - 0x67, 0x61, 0x74, 0x74, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x12, 0x1b, 0x2e, 0x42, 0x6c, - 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x47, 0x41, 0x54, 0x54, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, - 0x00, 0x12, 0x76, 0x0a, 0x24, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x5f, 0x62, - 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x12, 0x29, 0x2e, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x72, 0x65, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x27, 0x75, 0x6e, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x5f, 0x62, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, - 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x5f, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x4c, 0x45, 0x41, 0x64, 0x76, - 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x19, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x5f, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x61, - 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x12, 0x1f, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, - 0x22, 0x00, 0x12, 0x48, 0x0a, 0x1b, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x61, 0x6e, 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x12, 0x20, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x50, 0x61, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x05, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x22, 0x00, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} +const file_api_proto_rawDesc = "" + + "\n" + + "\tapi.proto\x1a\x11api_options.proto\"\x92\x01\n" + + "\fHelloRequest\x12\x1f\n" + + "\vclient_info\x18\x01 \x01(\tR\n" + + "clientInfo\x12*\n" + + "\x11api_version_major\x18\x02 \x01(\rR\x0fapiVersionMajor\x12*\n" + + "\x11api_version_minor\x18\x03 \x01(\rR\x0fapiVersionMinor:\t\xe0@\x01\xe8@\x02\x80A\x01\"\xbb\x01\n" + + "\rHelloResponse\x12*\n" + + "\x11api_version_major\x18\x01 \x01(\rR\x0fapiVersionMajor\x12*\n" + + "\x11api_version_minor\x18\x02 \x01(\rR\x0fapiVersionMinor\x12)\n" + + "\vserver_info\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18 R\n" + + "serverInfo\x12\x1c\n" + + "\x04name\x18\x04 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18\x1fR\x04name:\t\xe0@\x02\xe8@\x01\x80A\x01\"@\n" + + "\x15AuthenticationRequest\x12\x1a\n" + + "\bpassword\x18\x01 \x01(\tR\bpassword:\v\xe0@\x03\xe8@\x02\x80A\x01\x18\x01\"P\n" + + "\x16AuthenticationResponse\x12)\n" + + "\x10invalid_password\x18\x01 \x01(\bR\x0finvalidPassword:\v\xe0@\x04\xe8@\x01\x80A\x01\x18\x01\"I\n" + + "\x11DisconnectRequest\x12)\n" + + "\x06reason\x18\x01 \x01(\x0e2\x11.DisconnectReasonR\x06reason:\t\xe0@\x05\xe8@\x00\x80A\x01\"\x1f\n" + + "\x12DisconnectResponse:\t\xe0@\x06\xe8@\x00\x80A\x01\"\x15\n" + + "\vPingRequest:\x06\xe0@\a\xe8@\x00\"\x16\n" + + "\fPingResponse:\x06\xe0@\b\xe8@\x00\"\x1b\n" + + "\x11DeviceInfoRequest:\x06\xe0@\t\xe8@\x02\"A\n" + + "\bAreaInfo\x12\x17\n" + + "\aarea_id\x18\x01 \x01(\rR\x06areaId\x12\x1c\n" + + "\x04name\x18\x02 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\"`\n" + + "\n" + + "DeviceInfo\x12\x1b\n" + + "\tdevice_id\x18\x01 \x01(\rR\bdeviceId\x12\x1c\n" + + "\x04name\x18\x02 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12\x17\n" + + "\aarea_id\x18\x03 \x01(\rR\x06areaId\"X\n" + + "\x0fSerialProxyInfo\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x121\n" + + "\tport_type\x18\x02 \x01(\x0e2\x14.SerialProxyPortTypeR\bportType\"\xc4\r\n" + + "\x12DeviceInfoResponse\x12'\n" + + "\ruses_password\x18\x01 \x01(\bB\x02\x18\x01R\fusesPassword\x12\x1c\n" + + "\x04name\x18\x02 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18\x1fR\x04name\x12)\n" + + "\vmac_address\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18\x11R\n" + + "macAddress\x121\n" + + "\x0fesphome_version\x18\x04 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18 R\x0eesphomeVersion\x123\n" + + "\x10compilation_time\x18\x05 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18\x19R\x0fcompilationTime\x12\x1e\n" + + "\x05model\x18\x06 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18\x7fR\x05model\x127\n" + + "\x0ehas_deep_sleep\x18\a \x01(\bB\x11\x92A\x0eUSE_DEEP_SLEEPR\fhasDeepSleep\x12B\n" + + "\fproject_name\x18\b \x01(\tB\x1f\x92A\x14ESPHOME_PROJECT_NAME\x80\xb6\x18\x01\x90\xb6\x18\x7fR\vprojectName\x12H\n" + + "\x0fproject_version\x18\t \x01(\tB\x1f\x92A\x14ESPHOME_PROJECT_NAME\x80\xb6\x18\x01\x90\xb6\x18\x7fR\x0eprojectVersion\x127\n" + + "\x0ewebserver_port\x18\n" + + " \x01(\rB\x10\x92A\rUSE_WEBSERVERR\rwebserverPort\x12]\n" + + "\x1elegacy_bluetooth_proxy_version\x18\v \x01(\rB\x18\x92A\x13USE_BLUETOOTH_PROXY\x18\x01R\x1blegacyBluetoothProxyVersion\x12Y\n" + + "\x1dbluetooth_proxy_feature_flags\x18\x0f \x01(\rB\x16\x92A\x13USE_BLUETOOTH_PROXYR\x1abluetoothProxyFeatureFlags\x12,\n" + + "\fmanufacturer\x18\f \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18\x14R\fmanufacturer\x12-\n" + + "\rfriendly_name\x18\r \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\ffriendlyName\x12]\n" + + "\x1elegacy_voice_assistant_version\x18\x0e \x01(\rB\x18\x92A\x13USE_VOICE_ASSISTANT\x18\x01R\x1blegacyVoiceAssistantVersion\x12Y\n" + + "\x1dvoice_assistant_feature_flags\x18\x11 \x01(\rB\x16\x92A\x13USE_VOICE_ASSISTANTR\x1avoiceAssistantFeatureFlags\x12;\n" + + "\x0esuggested_area\x18\x10 \x01(\tB\x14\x92A\tUSE_AREAS\x80\xb6\x18\x01\x90\xb6\x18xR\rsuggestedArea\x12R\n" + + "\x15bluetooth_mac_address\x18\x12 \x01(\tB\x1e\x92A\x13USE_BLUETOOTH_PROXY\x80\xb6\x18\x01\x90\xb6\x18\x11R\x13bluetoothMacAddress\x12J\n" + + "\x18api_encryption_supported\x18\x13 \x01(\bB\x10\x92A\rUSE_API_NOISER\x16apiEncryptionSupported\x12M\n" + + "\adevices\x18\x14 \x03(\v2\v.DeviceInfoB&\x92A\vUSE_DEVICESҵ\x18\x14ESPHOME_DEVICE_COUNTR\adevices\x12C\n" + + "\x05areas\x18\x15 \x03(\v2\t.AreaInfoB\"\x92A\tUSE_AREASҵ\x18\x12ESPHOME_AREA_COUNTR\x05areas\x12+\n" + + "\x04area\x18\x16 \x01(\v2\t.AreaInfoB\f\x92A\tUSE_AREASR\x04area\x12M\n" + + "\x19zwave_proxy_feature_flags\x18\x17 \x01(\rB\x12\x92A\x0fUSE_ZWAVE_PROXYR\x16zwaveProxyFeatureFlags\x126\n" + + "\rzwave_home_id\x18\x18 \x01(\rB\x12\x92A\x0fUSE_ZWAVE_PROXYR\vzwaveHomeId\x12b\n" + + "\x0eserial_proxies\x18\x19 \x03(\v2\x10.SerialProxyInfoB)\x92A\x10USE_SERIAL_PROXYҵ\x18\x12SERIAL_PROXY_COUNTR\rserialProxies\x12R\n" + + "\x1capi_encryption_provisionable\x18\x1a \x01(\bB\x10\x92A\rUSE_API_NOISER\x1aapiEncryptionProvisionable:\x06\xe0@\n" + + "\xe8@\x01\"\x1d\n" + + "\x13ListEntitiesRequest:\x06\xe0@\v\xe8@\x02\"%\n" + + "\x18ListEntitiesDoneResponse:\t\xe0@\x13\xe8@\x01\x80A\x01\" \n" + + "\x16SubscribeStatesRequest:\x06\xe0@\x14\xe8@\x02\"\xdf\x03\n" + + " ListEntitiesBinarySensorResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12'\n" + + "\fdevice_class\x18\x05 \x01(\tB\x04\x90\xb6\x18/R\vdeviceClass\x125\n" + + "\x17is_status_binary_sensor\x18\x06 \x01(\bR\x14isStatusBinarySensor\x12.\n" + + "\x13disabled_by_default\x18\a \x01(\bR\x11disabledByDefault\x12*\n" + + "\x04icon\x18\b \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x128\n" + + "\x0fentity_category\x18\t \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12+\n" + + "\tdevice_id\x18\n" + + " \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:5\xe0@\f\xe8@\x01\xf2@\x11USE_BINARY_SENSOR\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xd6\x01\n" + + "\x19BinarySensorStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\bR\x05state\x12#\n" + + "\rmissing_state\x18\x03 \x01(\bR\fmissingState\x12+\n" + + "\tdevice_id\x18\x04 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:9\xe0@\x15\xe8@\x01\xf2@\x11USE_BINARY_SENSOR\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xb5\x04\n" + + "\x19ListEntitiesCoverResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12#\n" + + "\rassumed_state\x18\x05 \x01(\bR\fassumedState\x12+\n" + + "\x11supports_position\x18\x06 \x01(\bR\x10supportsPosition\x12#\n" + + "\rsupports_tilt\x18\a \x01(\bR\fsupportsTilt\x12'\n" + + "\fdevice_class\x18\b \x01(\tB\x04\x90\xb6\x18/R\vdeviceClass\x12.\n" + + "\x13disabled_by_default\x18\t \x01(\bR\x11disabledByDefault\x12*\n" + + "\x04icon\x18\n" + + " \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x128\n" + + "\x0fentity_category\x18\v \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12#\n" + + "\rsupports_stop\x18\f \x01(\bR\fsupportsStop\x12+\n" + + "\tdevice_id\x18\r \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:-\xe0@\r\xe8@\x01\xf2@\tUSE_COVER\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xb4\x02\n" + + "\x12CoverStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x128\n" + + "\flegacy_state\x18\x02 \x01(\x0e2\x11.LegacyCoverStateB\x02\x18\x01R\vlegacyState\x12\x1a\n" + + "\bposition\x18\x03 \x01(\x02R\bposition\x12\x12\n" + + "\x04tilt\x18\x04 \x01(\x02R\x04tilt\x12<\n" + + "\x11current_operation\x18\x05 \x01(\x0e2\x0f.CoverOperationR\x10currentOperation\x12+\n" + + "\tdevice_id\x18\x06 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:1\xe0@\x16\xe8@\x01\xf2@\tUSE_COVER\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xfb\x02\n" + + "\x13CoverCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x120\n" + + "\x12has_legacy_command\x18\x02 \x01(\bB\x02\x18\x01R\x10hasLegacyCommand\x12>\n" + + "\x0elegacy_command\x18\x03 \x01(\x0e2\x13.LegacyCoverCommandB\x02\x18\x01R\rlegacyCommand\x12!\n" + + "\fhas_position\x18\x04 \x01(\bR\vhasPosition\x12\x1a\n" + + "\bposition\x18\x05 \x01(\x02R\bposition\x12\x19\n" + + "\bhas_tilt\x18\x06 \x01(\bR\ahasTilt\x12\x12\n" + + "\x04tilt\x18\a \x01(\x02R\x04tilt\x12\x12\n" + + "\x04stop\x18\b \x01(\bR\x04stop\x12+\n" + + "\tdevice_id\x18\t \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:+\xe0@\x1e\xe8@\x02\xf2@\tUSE_COVER\x80A\x01\x8aA\x13CommandProtoMessage\"\xfe\x04\n" + + "\x17ListEntitiesFanResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x121\n" + + "\x14supports_oscillation\x18\x05 \x01(\bR\x13supportsOscillation\x12%\n" + + "\x0esupports_speed\x18\x06 \x01(\bR\rsupportsSpeed\x12-\n" + + "\x12supports_direction\x18\a \x01(\bR\x11supportsDirection\x122\n" + + "\x15supported_speed_count\x18\b \x01(\x05R\x13supportedSpeedCount\x12.\n" + + "\x13disabled_by_default\x18\t \x01(\bR\x11disabledByDefault\x12*\n" + + "\x04icon\x18\n" + + " \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x128\n" + + "\x0fentity_category\x18\v \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12S\n" + + "\x16supported_preset_modes\x18\f \x03(\tB\x1d\xf2\xb5\x18\x19std::vectorR\x14supportedPresetModes\x12+\n" + + "\tdevice_id\x18\r \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:+\xe0@\x0e\xe8@\x01\xf2@\aUSE_FAN\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xd4\x02\n" + + "\x10FanStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\bR\x05state\x12 \n" + + "\voscillating\x18\x03 \x01(\bR\voscillating\x12#\n" + + "\x05speed\x18\x04 \x01(\x0e2\t.FanSpeedB\x02\x18\x01R\x05speed\x12+\n" + + "\tdirection\x18\x05 \x01(\x0e2\r.FanDirectionR\tdirection\x12\x1f\n" + + "\vspeed_level\x18\x06 \x01(\x05R\n" + + "speedLevel\x12\x1f\n" + + "\vpreset_mode\x18\a \x01(\tR\n" + + "presetMode\x12+\n" + + "\tdevice_id\x18\b \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:/\xe0@\x17\xe8@\x01\xf2@\aUSE_FAN\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xab\x04\n" + + "\x11FanCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1b\n" + + "\thas_state\x18\x02 \x01(\bR\bhasState\x12\x14\n" + + "\x05state\x18\x03 \x01(\bR\x05state\x12\x1f\n" + + "\thas_speed\x18\x04 \x01(\bB\x02\x18\x01R\bhasSpeed\x12#\n" + + "\x05speed\x18\x05 \x01(\x0e2\t.FanSpeedB\x02\x18\x01R\x05speed\x12'\n" + + "\x0fhas_oscillating\x18\x06 \x01(\bR\x0ehasOscillating\x12 \n" + + "\voscillating\x18\a \x01(\bR\voscillating\x12#\n" + + "\rhas_direction\x18\b \x01(\bR\fhasDirection\x12+\n" + + "\tdirection\x18\t \x01(\x0e2\r.FanDirectionR\tdirection\x12&\n" + + "\x0fhas_speed_level\x18\n" + + " \x01(\bR\rhasSpeedLevel\x12\x1f\n" + + "\vspeed_level\x18\v \x01(\x05R\n" + + "speedLevel\x12&\n" + + "\x0fhas_preset_mode\x18\f \x01(\bR\rhasPresetMode\x12\x1f\n" + + "\vpreset_mode\x18\r \x01(\tR\n" + + "presetMode\x12+\n" + + "\tdevice_id\x18\x0e \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:)\xe0@\x1f\xe8@\x02\xf2@\aUSE_FAN\x80A\x01\x8aA\x13CommandProtoMessage\"\xc9\x06\n" + + "\x19ListEntitiesLightResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12X\n" + + "\x15supported_color_modes\x18\f \x03(\x0e2\n" + + ".ColorModeB\x18\xf2\xb5\x18\x14light::ColorModeMaskR\x13supportedColorModes\x12@\n" + + "\x1alegacy_supports_brightness\x18\x05 \x01(\bB\x02\x18\x01R\x18legacySupportsBrightness\x122\n" + + "\x13legacy_supports_rgb\x18\x06 \x01(\bB\x02\x18\x01R\x11legacySupportsRgb\x12A\n" + + "\x1blegacy_supports_white_value\x18\a \x01(\bB\x02\x18\x01R\x18legacySupportsWhiteValue\x12M\n" + + "!legacy_supports_color_temperature\x18\b \x01(\bB\x02\x18\x01R\x1elegacySupportsColorTemperature\x12\x1d\n" + + "\n" + + "min_mireds\x18\t \x01(\x02R\tminMireds\x12\x1d\n" + + "\n" + + "max_mireds\x18\n" + + " \x01(\x02R\tmaxMireds\x127\n" + + "\aeffects\x18\v \x03(\tB\x1d\xf2\xb5\x18\x19FixedVectorR\aeffects\x12.\n" + + "\x13disabled_by_default\x18\r \x01(\bR\x11disabledByDefault\x12*\n" + + "\x04icon\x18\x0e \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x128\n" + + "\x0fentity_category\x18\x0f \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12+\n" + + "\tdevice_id\x18\x10 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:-\xe0@\x0f\xe8@\x01\xf2@\tUSE_LIGHT\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xed\x03\n" + + "\x12LightStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\bR\x05state\x12\x1e\n" + + "\n" + + "brightness\x18\x03 \x01(\x02R\n" + + "brightness\x12)\n" + + "\n" + + "color_mode\x18\v \x01(\x0e2\n" + + ".ColorModeR\tcolorMode\x12)\n" + + "\x10color_brightness\x18\n" + + " \x01(\x02R\x0fcolorBrightness\x12\x10\n" + + "\x03red\x18\x04 \x01(\x02R\x03red\x12\x14\n" + + "\x05green\x18\x05 \x01(\x02R\x05green\x12\x12\n" + + "\x04blue\x18\x06 \x01(\x02R\x04blue\x12\x14\n" + + "\x05white\x18\a \x01(\x02R\x05white\x12+\n" + + "\x11color_temperature\x18\b \x01(\x02R\x10colorTemperature\x12\x1d\n" + + "\n" + + "cold_white\x18\f \x01(\x02R\tcoldWhite\x12\x1d\n" + + "\n" + + "warm_white\x18\r \x01(\x02R\twarmWhite\x12\x16\n" + + "\x06effect\x18\t \x01(\tR\x06effect\x12+\n" + + "\tdevice_id\x18\x0e \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:1\xe0@\x18\xe8@\x01\xf2@\tUSE_LIGHT\x80A\x01\x8aA\x19StateResponseProtoMessage\"\x87\b\n" + + "\x13LightCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1b\n" + + "\thas_state\x18\x02 \x01(\bR\bhasState\x12\x14\n" + + "\x05state\x18\x03 \x01(\bR\x05state\x12%\n" + + "\x0ehas_brightness\x18\x04 \x01(\bR\rhasBrightness\x12\x1e\n" + + "\n" + + "brightness\x18\x05 \x01(\x02R\n" + + "brightness\x12$\n" + + "\x0ehas_color_mode\x18\x16 \x01(\bR\fhasColorMode\x12)\n" + + "\n" + + "color_mode\x18\x17 \x01(\x0e2\n" + + ".ColorModeR\tcolorMode\x120\n" + + "\x14has_color_brightness\x18\x14 \x01(\bR\x12hasColorBrightness\x12)\n" + + "\x10color_brightness\x18\x15 \x01(\x02R\x0fcolorBrightness\x12\x17\n" + + "\ahas_rgb\x18\x06 \x01(\bR\x06hasRgb\x12\x10\n" + + "\x03red\x18\a \x01(\x02R\x03red\x12\x14\n" + + "\x05green\x18\b \x01(\x02R\x05green\x12\x12\n" + + "\x04blue\x18\t \x01(\x02R\x04blue\x12\x1b\n" + + "\thas_white\x18\n" + + " \x01(\bR\bhasWhite\x12\x14\n" + + "\x05white\x18\v \x01(\x02R\x05white\x122\n" + + "\x15has_color_temperature\x18\f \x01(\bR\x13hasColorTemperature\x12+\n" + + "\x11color_temperature\x18\r \x01(\x02R\x10colorTemperature\x12$\n" + + "\x0ehas_cold_white\x18\x18 \x01(\bR\fhasColdWhite\x12\x1d\n" + + "\n" + + "cold_white\x18\x19 \x01(\x02R\tcoldWhite\x12$\n" + + "\x0ehas_warm_white\x18\x1a \x01(\bR\fhasWarmWhite\x12\x1d\n" + + "\n" + + "warm_white\x18\x1b \x01(\x02R\twarmWhite\x122\n" + + "\x15has_transition_length\x18\x0e \x01(\bR\x13hasTransitionLength\x12+\n" + + "\x11transition_length\x18\x0f \x01(\rR\x10transitionLength\x12(\n" + + "\x10has_flash_length\x18\x10 \x01(\bR\x0ehasFlashLength\x12!\n" + + "\fflash_length\x18\x11 \x01(\rR\vflashLength\x12\x1d\n" + + "\n" + + "has_effect\x18\x12 \x01(\bR\thasEffect\x12\x16\n" + + "\x06effect\x18\x13 \x01(\tR\x06effect\x12+\n" + + "\tdevice_id\x18\x1c \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:+\xe0@ \xe8@\x02\xf2@\tUSE_LIGHT\x80A\x01\x8aA\x13CommandProtoMessage\"\xa4\x05\n" + + "\x1aListEntitiesSensorResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x124\n" + + "\x13unit_of_measurement\x18\x06 \x01(\tB\x04\x90\xb6\x18?R\x11unitOfMeasurement\x12+\n" + + "\x11accuracy_decimals\x18\a \x01(\x05R\x10accuracyDecimals\x12!\n" + + "\fforce_update\x18\b \x01(\bR\vforceUpdate\x12'\n" + + "\fdevice_class\x18\t \x01(\tB\x04\x90\xb6\x18/R\vdeviceClass\x122\n" + + "\vstate_class\x18\n" + + " \x01(\x0e2\x11.SensorStateClassR\n" + + "stateClass\x12M\n" + + "\x16legacy_last_reset_type\x18\v \x01(\x0e2\x14.SensorLastResetTypeB\x02\x18\x01R\x13legacyLastResetType\x12.\n" + + "\x13disabled_by_default\x18\f \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\r \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12+\n" + + "\tdevice_id\x18\x0e \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:.\xe0@\x10\xe8@\x01\xf2@\n" + + "USE_SENSOR\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xcc\x01\n" + + "\x13SensorStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\x02R\x05state\x12#\n" + + "\rmissing_state\x18\x03 \x01(\bR\fmissingState\x12+\n" + + "\tdevice_id\x18\x04 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:5\xe0@\x19\xe8@\x01\xf2@\n" + + "USE_SENSOR\x80A\x01\x8aA\x19StateResponseProtoMessage\x98A\x01\"\xc0\x03\n" + + "\x1aListEntitiesSwitchResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12#\n" + + "\rassumed_state\x18\x06 \x01(\bR\fassumedState\x12.\n" + + "\x13disabled_by_default\x18\a \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\b \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12'\n" + + "\fdevice_class\x18\t \x01(\tB\x04\x90\xb6\x18/R\vdeviceClass\x12+\n" + + "\tdevice_id\x18\n" + + " \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:.\xe0@\x11\xe8@\x01\xf2@\n" + + "USE_SWITCH\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xa4\x01\n" + + "\x13SwitchStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\bR\x05state\x12+\n" + + "\tdevice_id\x18\x03 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:2\xe0@\x1a\xe8@\x01\xf2@\n" + + "USE_SWITCH\x80A\x01\x8aA\x19StateResponseProtoMessage\"\x9f\x01\n" + + "\x14SwitchCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\bR\x05state\x12+\n" + + "\tdevice_id\x18\x03 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:,\xe0@!\xe8@\x02\xf2@\n" + + "USE_SWITCH\x80A\x01\x8aA\x13CommandProtoMessage\"\xa4\x03\n" + + "\x1eListEntitiesTextSensorResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12'\n" + + "\fdevice_class\x18\b \x01(\tB\x04\x90\xb6\x18/R\vdeviceClass\x12+\n" + + "\tdevice_id\x18\t \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:3\xe0@\x12\xe8@\x01\xf2@\x0fUSE_TEXT_SENSOR\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xd2\x01\n" + + "\x17TextSensorStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\tR\x05state\x12#\n" + + "\rmissing_state\x18\x03 \x01(\bR\fmissingState\x12+\n" + + "\tdevice_id\x18\x04 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:7\xe0@\x1b\xe8@\x01\xf2@\x0fUSE_TEXT_SENSOR\x80A\x01\x8aA\x19StateResponseProtoMessage\"`\n" + + "\x14SubscribeLogsRequest\x12\x1f\n" + + "\x05level\x18\x01 \x01(\x0e2\t.LogLevelR\x05level\x12\x1f\n" + + "\vdump_config\x18\x02 \x01(\bR\n" + + "dumpConfig:\x06\xe0@\x1c\xe8@\x02\"o\n" + + "\x15SubscribeLogsResponse\x12%\n" + + "\x05level\x18\x01 \x01(\x0e2\t.LogLevelB\x04\x80\xb6\x18\x01R\x05level\x12\x1e\n" + + "\amessage\x18\x03 \x01(\fB\x04\x80\xb6\x18\x01R\amessage:\x0f\xe0@\x1d\xe8@\x01\xf8@\x00\x80A\x00\x98A\x01\"H\n" + + "\x1cNoiseEncryptionSetKeyRequest\x12\x10\n" + + "\x03key\x18\x01 \x01(\fR\x03key:\x16\xe0@|\xe8@\x02\xf2@\rUSE_API_NOISE\"Q\n" + + "\x1dNoiseEncryptionSetKeyResponse\x12\x18\n" + + "\asuccess\x18\x01 \x01(\bR\asuccess:\x16\xe0@}\xe8@\x01\xf2@\rUSE_API_NOISE\"P\n" + + "%SubscribeHomeassistantServicesRequest:'\xe0@\"\xe8@\x02\xf2@\x1eUSE_API_HOMEASSISTANT_SERVICES\"A\n" + + "\x17HomeassistantServiceMap\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"\xac\x04\n" + + "\x1aHomeassistantActionRequest\x12\x18\n" + + "\aservice\x18\x01 \x01(\tR\aservice\x122\n" + + "\x04data\x18\x02 \x03(\v2\x18.HomeassistantServiceMapB\x04\xe8\xb5\x18\x01R\x04data\x12C\n" + + "\rdata_template\x18\x03 \x03(\v2\x18.HomeassistantServiceMapB\x04\xe8\xb5\x18\x01R\fdataTemplate\x12<\n" + + "\tvariables\x18\x04 \x03(\v2\x18.HomeassistantServiceMapB\x04\xe8\xb5\x18\x01R\tvariables\x12\x19\n" + + "\bis_event\x18\x05 \x01(\bR\aisEvent\x12B\n" + + "\acall_id\x18\x06 \x01(\rB)\x92A&USE_API_HOMEASSISTANT_ACTION_RESPONSESR\x06callId\x12U\n" + + "\x0ewants_response\x18\a \x01(\bB.\x92A+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSONR\rwantsResponse\x12[\n" + + "\x11response_template\x18\b \x01(\tB.\x92A+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSONR\x10responseTemplate:*\xe0@#\xe8@\x01\xf2@\x1eUSE_API_HOMEASSISTANT_SERVICES\x80A\x01\"\xff\x01\n" + + "\x1bHomeassistantActionResponse\x12\x17\n" + + "\acall_id\x18\x01 \x01(\rR\x06callId\x12\x18\n" + + "\asuccess\x18\x02 \x01(\bR\asuccess\x12#\n" + + "\rerror_message\x18\x03 \x01(\tR\ferrorMessage\x12S\n" + + "\rresponse_data\x18\x04 \x01(\fB.\x92A+USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSONR\fresponseData:3\xe0@\x82\x01\xe8@\x02\xf2@&USE_API_HOMEASSISTANT_ACTION_RESPONSES\x80A\x01\"L\n" + + "#SubscribeHomeAssistantStatesRequest:%\xe0@&\xe8@\x02\xf2@\x1cUSE_API_HOMEASSISTANT_STATES\"\x9b\x01\n" + + "#SubscribeHomeAssistantStateResponse\x12\x1b\n" + + "\tentity_id\x18\x01 \x01(\tR\bentityId\x12\x1c\n" + + "\tattribute\x18\x02 \x01(\tR\tattribute\x12\x12\n" + + "\x04once\x18\x03 \x01(\bR\x04once:%\xe0@'\xe8@\x01\xf2@\x1cUSE_API_HOMEASSISTANT_STATES\"\x97\x01\n" + + "\x1aHomeAssistantStateResponse\x12\x1b\n" + + "\tentity_id\x18\x01 \x01(\tR\bentityId\x12\x14\n" + + "\x05state\x18\x02 \x01(\tR\x05state\x12\x1c\n" + + "\tattribute\x18\x03 \x01(\tR\tattribute:(\xe0@(\xe8@\x02\xf2@\x1cUSE_API_HOMEASSISTANT_STATES\x80A\x01\"\x18\n" + + "\x0eGetTimeRequest:\x06\xe0@$\xe8@\x01\"\xaf\x01\n" + + "\aDSTRule\x12!\n" + + "\ftime_seconds\x18\x01 \x01(\x11R\vtimeSeconds\x12\x10\n" + + "\x03day\x18\x02 \x01(\rR\x03day\x12 \n" + + "\x04type\x18\x03 \x01(\x0e2\f.DSTRuleTypeR\x04type\x12\x14\n" + + "\x05month\x18\x04 \x01(\rR\x05month\x12\x12\n" + + "\x04week\x18\x05 \x01(\rR\x04week\x12\x1e\n" + + "\vday_of_week\x18\x06 \x01(\rR\tdayOfWeek:\x03\xe8@\x02\"\xbb\x01\n" + + "\x0eParsedTimezone\x12,\n" + + "\x12std_offset_seconds\x18\x01 \x01(\x11R\x10stdOffsetSeconds\x12,\n" + + "\x12dst_offset_seconds\x18\x02 \x01(\x11R\x10dstOffsetSeconds\x12%\n" + + "\tdst_start\x18\x03 \x01(\v2\b.DSTRuleR\bdstStart\x12!\n" + + "\adst_end\x18\x04 \x01(\v2\b.DSTRuleR\x06dstEnd:\x03\xe8@\x02\"\x97\x01\n" + + "\x0fGetTimeResponse\x12#\n" + + "\repoch_seconds\x18\x01 \x01(\aR\fepochSeconds\x12\x1a\n" + + "\btimezone\x18\x02 \x01(\tR\btimezone\x128\n" + + "\x0fparsed_timezone\x18\x03 \x01(\v2\x0f.ParsedTimezoneR\x0eparsedTimezone:\t\xe0@%\xe8@\x02\x80A\x01\"x\n" + + "\x1cListEntitiesServicesArgument\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12#\n" + + "\x04type\x18\x02 \x01(\x0e2\x0f.ServiceArgTypeR\x04type:\x1f\xf2@\x1cUSE_API_USER_DEFINED_ACTIONS\"\xee\x01\n" + + "\x1cListEntitiesServicesResponse\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x127\n" + + "\x04args\x18\x03 \x03(\v2\x1d.ListEntitiesServicesArgumentB\x04\xe8\xb5\x18\x01R\x04args\x12B\n" + + "\x11supports_response\x18\x04 \x01(\x0e2\x15.SupportsResponseTypeR\x10supportsResponse:%\xe0@)\xe8@\x01\xf2@\x1cUSE_API_USER_DEFINED_ACTIONS\"\xce\x02\n" + + "\x16ExecuteServiceArgument\x12\x13\n" + + "\x05bool_\x18\x01 \x01(\bR\x04bool\x12\x1d\n" + + "\n" + + "legacy_int\x18\x02 \x01(\x05R\tlegacyInt\x12\x15\n" + + "\x06float_\x18\x03 \x01(\x02R\x05float\x12\x17\n" + + "\astring_\x18\x04 \x01(\tR\x06string\x12\x11\n" + + "\x04int_\x18\x05 \x01(\x11R\x03int\x12%\n" + + "\n" + + "bool_array\x18\x06 \x03(\bB\x06\xe8\xb5\x18\x01\x10\x00R\tboolArray\x12#\n" + + "\tint_array\x18\a \x03(\x11B\x06\xe8\xb5\x18\x01\x10\x00R\bintArray\x12'\n" + + "\vfloat_array\x18\b \x03(\x02B\x06\xe8\xb5\x18\x01\x10\x00R\n" + + "floatArray\x12'\n" + + "\fstring_array\x18\t \x03(\tB\x04\xe8\xb5\x18\x01R\vstringArray:\x1f\xf2@\x1cUSE_API_USER_DEFINED_ACTIONS\"\xa2\x02\n" + + "\x15ExecuteServiceRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x121\n" + + "\x04args\x18\x02 \x03(\v2\x17.ExecuteServiceArgumentB\x04\xe8\xb5\x18\x01R\x04args\x12A\n" + + "\acall_id\x18\x03 \x01(\rB(\x92A%USE_API_USER_DEFINED_ACTION_RESPONSESR\x06callId\x12Q\n" + + "\x0freturn_response\x18\x04 \x01(\bB(\x92A%USE_API_USER_DEFINED_ACTION_RESPONSESR\x0ereturnResponse:(\xe0@*\xe8@\x02\xf2@\x1cUSE_API_USER_DEFINED_ACTIONS\x80A\x01\"\xfc\x01\n" + + "\x16ExecuteServiceResponse\x12\x17\n" + + "\acall_id\x18\x01 \x01(\rR\x06callId\x12\x18\n" + + "\asuccess\x18\x02 \x01(\bR\asuccess\x12#\n" + + "\rerror_message\x18\x03 \x01(\tR\ferrorMessage\x12V\n" + + "\rresponse_data\x18\x04 \x01(\fB1\x92A*USE_API_USER_DEFINED_ACTION_RESPONSES_JSON\xe0\xb5\x18\x01R\fresponseData:2\xe0@\x83\x01\xe8@\x01\xf2@%USE_API_USER_DEFINED_ACTION_RESPONSES\x80A\x01\"\xf2\x02\n" + + "\x1aListEntitiesCameraResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12.\n" + + "\x13disabled_by_default\x18\x05 \x01(\bR\x11disabledByDefault\x12*\n" + + "\x04icon\x18\x06 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12+\n" + + "\tdevice_id\x18\b \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:.\xe0@+\xe8@\x01\xf2@\n" + + "USE_CAMERA\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xb3\x01\n" + + "\x13CameraImageResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x12\n" + + "\x04data\x18\x02 \x01(\fR\x04data\x12\x12\n" + + "\x04done\x18\x03 \x01(\bR\x04done\x12+\n" + + "\tdevice_id\x18\x04 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:/\xe0@,\xe8@\x01\xf2@\n" + + "USE_CAMERA\x8aA\x19StateResponseProtoMessage\"\\\n" + + "\x12CameraImageRequest\x12\x16\n" + + "\x06single\x18\x01 \x01(\bR\x06single\x12\x16\n" + + "\x06stream\x18\x02 \x01(\bR\x06stream:\x16\xe0@-\xe8@\x02\xf2@\n" + + "USE_CAMERA\x80A\x01\"\xca\r\n" + + "\x1bListEntitiesClimateResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12@\n" + + "\x1csupports_current_temperature\x18\x05 \x01(\bR\x1asupportsCurrentTemperature\x12P\n" + + "%supports_two_point_target_temperature\x18\x06 \x01(\bR!supportsTwoPointTargetTemperature\x12S\n" + + "\x0fsupported_modes\x18\a \x03(\x0e2\f.ClimateModeB\x1c\xf2\xb5\x18\x18climate::ClimateModeMaskR\x0esupportedModes\x124\n" + + "\x16visual_min_temperature\x18\b \x01(\x02R\x14visualMinTemperature\x124\n" + + "\x16visual_max_temperature\x18\t \x01(\x02R\x14visualMaxTemperature\x12C\n" + + "\x1evisual_target_temperature_step\x18\n" + + " \x01(\x02R\x1bvisualTargetTemperatureStep\x124\n" + + "\x14legacy_supports_away\x18\v \x01(\bB\x02\x18\x01R\x12legacySupportsAway\x12'\n" + + "\x0fsupports_action\x18\f \x01(\bR\x0esupportsAction\x12`\n" + + "\x13supported_fan_modes\x18\r \x03(\x0e2\x0f.ClimateFanModeB\x1f\xf2\xb5\x18\x1bclimate::ClimateFanModeMaskR\x11supportedFanModes\x12h\n" + + "\x15supported_swing_modes\x18\x0e \x03(\x0e2\x11.ClimateSwingModeB!\xf2\xb5\x18\x1dclimate::ClimateSwingModeMaskR\x13supportedSwingModes\x12Z\n" + + "\x1asupported_custom_fan_modes\x18\x0f \x03(\tB\x1d\xf2\xb5\x18\x19std::vectorR\x17supportedCustomFanModes\x12[\n" + + "\x11supported_presets\x18\x10 \x03(\x0e2\x0e.ClimatePresetB\x1e\xf2\xb5\x18\x1aclimate::ClimatePresetMaskR\x10supportedPresets\x12W\n" + + "\x18supported_custom_presets\x18\x11 \x03(\tB\x1d\xf2\xb5\x18\x19std::vectorR\x16supportedCustomPresets\x12.\n" + + "\x13disabled_by_default\x18\x12 \x01(\bR\x11disabledByDefault\x12*\n" + + "\x04icon\x18\x13 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x128\n" + + "\x0fentity_category\x18\x14 \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12E\n" + + "\x1fvisual_current_temperature_step\x18\x15 \x01(\x02R\x1cvisualCurrentTemperatureStep\x12:\n" + + "\x19supports_current_humidity\x18\x16 \x01(\bR\x17supportsCurrentHumidity\x128\n" + + "\x18supports_target_humidity\x18\x17 \x01(\bR\x16supportsTargetHumidity\x12.\n" + + "\x13visual_min_humidity\x18\x18 \x01(\x02R\x11visualMinHumidity\x12.\n" + + "\x13visual_max_humidity\x18\x19 \x01(\x02R\x11visualMaxHumidity\x12+\n" + + "\tdevice_id\x18\x1a \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId\x12#\n" + + "\rfeature_flags\x18\x1b \x01(\rR\ffeatureFlags\x12;\n" + + "\x10temperature_unit\x18\x1c \x01(\x0e2\x10.TemperatureUnitR\x0ftemperatureUnit:/\xe0@.\xe8@\x01\xf2@\vUSE_CLIMATE\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\x81\x06\n" + + "\x14ClimateStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12 \n" + + "\x04mode\x18\x02 \x01(\x0e2\f.ClimateModeR\x04mode\x12/\n" + + "\x13current_temperature\x18\x03 \x01(\x02R\x12currentTemperature\x12-\n" + + "\x12target_temperature\x18\x04 \x01(\x02R\x11targetTemperature\x124\n" + + "\x16target_temperature_low\x18\x05 \x01(\x02R\x14targetTemperatureLow\x126\n" + + "\x17target_temperature_high\x18\x06 \x01(\x02R\x15targetTemperatureHigh\x120\n" + + "\x12unused_legacy_away\x18\a \x01(\bB\x02\x18\x01R\x10unusedLegacyAway\x12&\n" + + "\x06action\x18\b \x01(\x0e2\x0e.ClimateActionR\x06action\x12*\n" + + "\bfan_mode\x18\t \x01(\x0e2\x0f.ClimateFanModeR\afanMode\x120\n" + + "\n" + + "swing_mode\x18\n" + + " \x01(\x0e2\x11.ClimateSwingModeR\tswingMode\x12&\n" + + "\x0fcustom_fan_mode\x18\v \x01(\tR\rcustomFanMode\x12&\n" + + "\x06preset\x18\f \x01(\x0e2\x0e.ClimatePresetR\x06preset\x12#\n" + + "\rcustom_preset\x18\r \x01(\tR\fcustomPreset\x12)\n" + + "\x10current_humidity\x18\x0e \x01(\x02R\x0fcurrentHumidity\x12'\n" + + "\x0ftarget_humidity\x18\x0f \x01(\x02R\x0etargetHumidity\x12+\n" + + "\tdevice_id\x18\x10 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:3\xe0@/\xe8@\x01\xf2@\vUSE_CLIMATE\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xf0\b\n" + + "\x15ClimateCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x19\n" + + "\bhas_mode\x18\x02 \x01(\bR\ahasMode\x12 \n" + + "\x04mode\x18\x03 \x01(\x0e2\f.ClimateModeR\x04mode\x124\n" + + "\x16has_target_temperature\x18\x04 \x01(\bR\x14hasTargetTemperature\x12-\n" + + "\x12target_temperature\x18\x05 \x01(\x02R\x11targetTemperature\x12;\n" + + "\x1ahas_target_temperature_low\x18\x06 \x01(\bR\x17hasTargetTemperatureLow\x124\n" + + "\x16target_temperature_low\x18\a \x01(\x02R\x14targetTemperatureLow\x12=\n" + + "\x1bhas_target_temperature_high\x18\b \x01(\bR\x18hasTargetTemperatureHigh\x126\n" + + "\x17target_temperature_high\x18\t \x01(\x02R\x15targetTemperatureHigh\x127\n" + + "\x16unused_has_legacy_away\x18\n" + + " \x01(\bB\x02\x18\x01R\x13unusedHasLegacyAway\x120\n" + + "\x12unused_legacy_away\x18\v \x01(\bB\x02\x18\x01R\x10unusedLegacyAway\x12 \n" + + "\fhas_fan_mode\x18\f \x01(\bR\n" + + "hasFanMode\x12*\n" + + "\bfan_mode\x18\r \x01(\x0e2\x0f.ClimateFanModeR\afanMode\x12$\n" + + "\x0ehas_swing_mode\x18\x0e \x01(\bR\fhasSwingMode\x120\n" + + "\n" + + "swing_mode\x18\x0f \x01(\x0e2\x11.ClimateSwingModeR\tswingMode\x12-\n" + + "\x13has_custom_fan_mode\x18\x10 \x01(\bR\x10hasCustomFanMode\x12&\n" + + "\x0fcustom_fan_mode\x18\x11 \x01(\tR\rcustomFanMode\x12\x1d\n" + + "\n" + + "has_preset\x18\x12 \x01(\bR\thasPreset\x12&\n" + + "\x06preset\x18\x13 \x01(\x0e2\x0e.ClimatePresetR\x06preset\x12*\n" + + "\x11has_custom_preset\x18\x14 \x01(\bR\x0fhasCustomPreset\x12#\n" + + "\rcustom_preset\x18\x15 \x01(\tR\fcustomPreset\x12.\n" + + "\x13has_target_humidity\x18\x16 \x01(\bR\x11hasTargetHumidity\x12'\n" + + "\x0ftarget_humidity\x18\x17 \x01(\x02R\x0etargetHumidity\x12+\n" + + "\tdevice_id\x18\x18 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:-\xe0@0\xe8@\x02\xf2@\vUSE_CLIMATE\x80A\x01\x8aA\x13CommandProtoMessage\"\xd0\x05\n" + + "\x1fListEntitiesWaterHeaterResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x04 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x05 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\x06 \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12+\n" + + "\tdevice_id\x18\a \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId\x12'\n" + + "\x0fmin_temperature\x18\b \x01(\x02R\x0eminTemperature\x12'\n" + + "\x0fmax_temperature\x18\t \x01(\x02R\x0emaxTemperature\x126\n" + + "\x17target_temperature_step\x18\n" + + " \x01(\x02R\x15targetTemperatureStep\x12`\n" + + "\x0fsupported_modes\x18\v \x03(\x0e2\x10.WaterHeaterModeB%\xf2\xb5\x18!water_heater::WaterHeaterModeMaskR\x0esupportedModes\x12-\n" + + "\x12supported_features\x18\f \x01(\rR\x11supportedFeatures\x12;\n" + + "\x10temperature_unit\x18\r \x01(\x0e2\x10.TemperatureUnitR\x0ftemperatureUnit:5\xe0@\x84\x01\xe8@\x01\xf2@\x10USE_WATER_HEATER\x8aA\x18InfoResponseProtoMessage\"\xa4\x03\n" + + "\x18WaterHeaterStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12/\n" + + "\x13current_temperature\x18\x02 \x01(\x02R\x12currentTemperature\x12-\n" + + "\x12target_temperature\x18\x03 \x01(\x02R\x11targetTemperature\x12$\n" + + "\x04mode\x18\x04 \x01(\x0e2\x10.WaterHeaterModeR\x04mode\x12+\n" + + "\tdevice_id\x18\x05 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId\x12\x14\n" + + "\x05state\x18\x06 \x01(\rR\x05state\x124\n" + + "\x16target_temperature_low\x18\a \x01(\x02R\x14targetTemperatureLow\x126\n" + + "\x17target_temperature_high\x18\b \x01(\x02R\x15targetTemperatureHigh:9\xe0@\x85\x01\xe8@\x01\xf2@\x10USE_WATER_HEATER\x80A\x01\x8aA\x19StateResponseProtoMessage\"\x8d\x03\n" + + "\x19WaterHeaterCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1d\n" + + "\n" + + "has_fields\x18\x02 \x01(\rR\thasFields\x12$\n" + + "\x04mode\x18\x03 \x01(\x0e2\x10.WaterHeaterModeR\x04mode\x12-\n" + + "\x12target_temperature\x18\x04 \x01(\x02R\x11targetTemperature\x12+\n" + + "\tdevice_id\x18\x05 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId\x12\x14\n" + + "\x05state\x18\x06 \x01(\rR\x05state\x124\n" + + "\x16target_temperature_low\x18\a \x01(\x02R\x14targetTemperatureLow\x126\n" + + "\x17target_temperature_high\x18\b \x01(\x02R\x15targetTemperatureHigh:3\xe0@\x86\x01\xe8@\x02\xf2@\x10USE_WATER_HEATER\x80A\x01\x8aA\x13CommandProtoMessage\"\xc0\x04\n" + + "\x1aListEntitiesNumberResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12\x1b\n" + + "\tmin_value\x18\x06 \x01(\x02R\bminValue\x12\x1b\n" + + "\tmax_value\x18\a \x01(\x02R\bmaxValue\x12\x12\n" + + "\x04step\x18\b \x01(\x02R\x04step\x12.\n" + + "\x13disabled_by_default\x18\t \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\n" + + " \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x124\n" + + "\x13unit_of_measurement\x18\v \x01(\tB\x04\x90\xb6\x18?R\x11unitOfMeasurement\x12\x1f\n" + + "\x04mode\x18\f \x01(\x0e2\v.NumberModeR\x04mode\x12'\n" + + "\fdevice_class\x18\r \x01(\tB\x04\x90\xb6\x18/R\vdeviceClass\x12+\n" + + "\tdevice_id\x18\x0e \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:.\xe0@1\xe8@\x01\xf2@\n" + + "USE_NUMBER\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xc9\x01\n" + + "\x13NumberStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\x02R\x05state\x12#\n" + + "\rmissing_state\x18\x03 \x01(\bR\fmissingState\x12+\n" + + "\tdevice_id\x18\x04 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:2\xe0@2\xe8@\x01\xf2@\n" + + "USE_NUMBER\x80A\x01\x8aA\x19StateResponseProtoMessage\"\x9f\x01\n" + + "\x14NumberCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\x02R\x05state\x12+\n" + + "\tdevice_id\x18\x03 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:,\xe0@3\xe8@\x02\xf2@\n" + + "USE_NUMBER\x80A\x01\x8aA\x13CommandProtoMessage\"\xab\x03\n" + + "\x1aListEntitiesSelectResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x127\n" + + "\aoptions\x18\x06 \x03(\tB\x1d\xf2\xb5\x18\x19FixedVectorR\aoptions\x12.\n" + + "\x13disabled_by_default\x18\a \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\b \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12+\n" + + "\tdevice_id\x18\t \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:.\xe0@4\xe8@\x01\xf2@\n" + + "USE_SELECT\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xc9\x01\n" + + "\x13SelectStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\tR\x05state\x12#\n" + + "\rmissing_state\x18\x03 \x01(\bR\fmissingState\x12+\n" + + "\tdevice_id\x18\x04 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:2\xe0@5\xe8@\x01\xf2@\n" + + "USE_SELECT\x80A\x01\x8aA\x19StateResponseProtoMessage\"\x9f\x01\n" + + "\x14SelectCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\tR\x05state\x12+\n" + + "\tdevice_id\x18\x03 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:,\xe0@6\xe8@\x02\xf2@\n" + + "USE_SELECT\x80A\x01\x8aA\x13CommandProtoMessage\"\xfb\x03\n" + + "\x19ListEntitiesSirenResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x123\n" + + "\x05tones\x18\a \x03(\tB\x1d\xf2\xb5\x18\x19FixedVectorR\x05tones\x12+\n" + + "\x11supports_duration\x18\b \x01(\bR\x10supportsDuration\x12'\n" + + "\x0fsupports_volume\x18\t \x01(\bR\x0esupportsVolume\x128\n" + + "\x0fentity_category\x18\n" + + " \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12+\n" + + "\tdevice_id\x18\v \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:-\xe0@7\xe8@\x01\xf2@\tUSE_SIREN\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xa2\x01\n" + + "\x12SirenStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\bR\x05state\x12+\n" + + "\tdevice_id\x18\x03 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:1\xe0@8\xe8@\x01\xf2@\tUSE_SIREN\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xdf\x02\n" + + "\x13SirenCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1b\n" + + "\thas_state\x18\x02 \x01(\bR\bhasState\x12\x14\n" + + "\x05state\x18\x03 \x01(\bR\x05state\x12\x19\n" + + "\bhas_tone\x18\x04 \x01(\bR\ahasTone\x12\x12\n" + + "\x04tone\x18\x05 \x01(\tR\x04tone\x12!\n" + + "\fhas_duration\x18\x06 \x01(\bR\vhasDuration\x12\x1a\n" + + "\bduration\x18\a \x01(\rR\bduration\x12\x1d\n" + + "\n" + + "has_volume\x18\b \x01(\bR\thasVolume\x12\x16\n" + + "\x06volume\x18\t \x01(\x02R\x06volume\x12+\n" + + "\tdevice_id\x18\n" + + " \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:+\xe0@9\xe8@\x02\xf2@\tUSE_SIREN\x80A\x01\x8aA\x13CommandProtoMessage\"\xfe\x03\n" + + "\x18ListEntitiesLockResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12#\n" + + "\rassumed_state\x18\b \x01(\bR\fassumedState\x12#\n" + + "\rsupports_open\x18\t \x01(\bR\fsupportsOpen\x12#\n" + + "\rrequires_code\x18\n" + + " \x01(\bR\frequiresCode\x12\x1f\n" + + "\vcode_format\x18\v \x01(\tR\n" + + "codeFormat\x12+\n" + + "\tdevice_id\x18\f \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:,\xe0@:\xe8@\x01\xf2@\bUSE_LOCK\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xac\x01\n" + + "\x11LockStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12 \n" + + "\x05state\x18\x02 \x01(\x0e2\n" + + ".LockStateR\x05state\x12+\n" + + "\tdevice_id\x18\x03 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:0\xe0@;\xe8@\x01\xf2@\bUSE_LOCK\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xdc\x01\n" + + "\x12LockCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12&\n" + + "\acommand\x18\x02 \x01(\x0e2\f.LockCommandR\acommand\x12\x19\n" + + "\bhas_code\x18\x03 \x01(\bR\ahasCode\x12\x12\n" + + "\x04code\x18\x04 \x01(\tR\x04code\x12+\n" + + "\tdevice_id\x18\x05 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:*\xe0@<\xe8@\x02\xf2@\bUSE_LOCK\x80A\x01\x8aA\x13CommandProtoMessage\"\x9b\x03\n" + + "\x1aListEntitiesButtonResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12'\n" + + "\fdevice_class\x18\b \x01(\tB\x04\x90\xb6\x18/R\vdeviceClass\x12+\n" + + "\tdevice_id\x18\t \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:.\xe0@=\xe8@\x01\xf2@\n" + + "USE_BUTTON\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\x89\x01\n" + + "\x14ButtonCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12+\n" + + "\tdevice_id\x18\x02 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:,\xe0@>\xe8@\x02\xf2@\n" + + "USE_BUTTON\x80A\x01\x8aA\x13CommandProtoMessage\"\xe5\x01\n" + + "\x1aMediaPlayerSupportedFormat\x12\x16\n" + + "\x06format\x18\x01 \x01(\tR\x06format\x12\x1f\n" + + "\vsample_rate\x18\x02 \x01(\rR\n" + + "sampleRate\x12!\n" + + "\fnum_channels\x18\x03 \x01(\rR\vnumChannels\x123\n" + + "\apurpose\x18\x04 \x01(\x0e2\x19.MediaPlayerFormatPurposeR\apurpose\x12!\n" + + "\fsample_bytes\x18\x05 \x01(\rR\vsampleBytes:\x13\xf2@\x10USE_MEDIA_PLAYER\"\x93\x04\n" + + "\x1fListEntitiesMediaPlayerResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12%\n" + + "\x0esupports_pause\x18\b \x01(\bR\rsupportsPause\x12H\n" + + "\x11supported_formats\x18\t \x03(\v2\x1b.MediaPlayerSupportedFormatR\x10supportedFormats\x12+\n" + + "\tdevice_id\x18\n" + + " \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId\x12#\n" + + "\rfeature_flags\x18\v \x01(\rR\ffeatureFlags:4\xe0@?\xe8@\x01\xf2@\x10USE_MEDIA_PLAYER\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xf0\x01\n" + + "\x18MediaPlayerStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12'\n" + + "\x05state\x18\x02 \x01(\x0e2\x11.MediaPlayerStateR\x05state\x12\x16\n" + + "\x06volume\x18\x03 \x01(\x02R\x06volume\x12\x14\n" + + "\x05muted\x18\x04 \x01(\bR\x05muted\x12+\n" + + "\tdevice_id\x18\x05 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:8\xe0@@\xe8@\x01\xf2@\x10USE_MEDIA_PLAYER\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xab\x03\n" + + "\x19MediaPlayerCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1f\n" + + "\vhas_command\x18\x02 \x01(\bR\n" + + "hasCommand\x12-\n" + + "\acommand\x18\x03 \x01(\x0e2\x13.MediaPlayerCommandR\acommand\x12\x1d\n" + + "\n" + + "has_volume\x18\x04 \x01(\bR\thasVolume\x12\x16\n" + + "\x06volume\x18\x05 \x01(\x02R\x06volume\x12\"\n" + + "\rhas_media_url\x18\x06 \x01(\bR\vhasMediaUrl\x12\x1b\n" + + "\tmedia_url\x18\a \x01(\tR\bmediaUrl\x12)\n" + + "\x10has_announcement\x18\b \x01(\bR\x0fhasAnnouncement\x12\"\n" + + "\fannouncement\x18\t \x01(\bR\fannouncement\x12+\n" + + "\tdevice_id\x18\n" + + " \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:2\xe0@A\xe8@\x02\xf2@\x10USE_MEDIA_PLAYER\x80A\x01\x8aA\x13CommandProtoMessage\"_\n" + + ")SubscribeBluetoothLEAdvertisementsRequest\x12\x14\n" + + "\x05flags\x18\x01 \x01(\rR\x05flags:\x1c\xe0@B\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"g\n" + + "\x14BluetoothServiceData\x12\x12\n" + + "\x04uuid\x18\x01 \x01(\tR\x04uuid\x12#\n" + + "\vlegacy_data\x18\x02 \x03(\rB\x02\x18\x01R\n" + + "legacyData\x12\x12\n" + + "\x04data\x18\x03 \x01(\fR\x04data:\x02\x18\x01\"\xcd\x02\n" + + " BluetoothLEAdvertisementResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x12\n" + + "\x04name\x18\x02 \x01(\fR\x04name\x12\x12\n" + + "\x04rssi\x18\x03 \x01(\x11R\x04rssi\x12#\n" + + "\rservice_uuids\x18\x04 \x03(\tR\fserviceUuids\x128\n" + + "\fservice_data\x18\x05 \x03(\v2\x15.BluetoothServiceDataR\vserviceData\x12B\n" + + "\x11manufacturer_data\x18\x06 \x03(\v2\x15.BluetoothServiceDataR\x10manufacturerData\x12!\n" + + "\faddress_type\x18\a \x01(\rR\vaddressType:!\xe0@C\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\x80A\x01\x18\x01\"\xa7\x01\n" + + "\x1bBluetoothLERawAdvertisement\x12\"\n" + + "\aaddress\x18\x01 \x01(\x04B\b\x80\xb6\x18\x01\x98\xb6\x18\x01R\aaddress\x12\x18\n" + + "\x04rssi\x18\x02 \x01(\x11B\x04\x80\xb6\x18\x01R\x04rssi\x12'\n" + + "\faddress_type\x18\x03 \x01(\rB\x04\x88\xb6\x18\x04R\vaddressType\x12\x1c\n" + + "\x04data\x18\x04 \x01(\fB\b\xb8\xb5\x18>\x80\xb6\x18\x01R\x04data:\x03\x90A\x01\"\xbe\x01\n" + + "$BluetoothLERawAdvertisementsResponse\x12r\n" + + "\x0eadvertisements\x18\x01 \x03(\v2\x1c.BluetoothLERawAdvertisementB,ڵ\x18(BLUETOOTH_PROXY_ADVERTISEMENT_BATCH_SIZER\x0eadvertisements:\"\xe0@]\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\x80A\x01\x98A\x01\"\xdd\x01\n" + + "\x16BluetoothDeviceRequest\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12>\n" + + "\frequest_type\x18\x02 \x01(\x0e2\x1b.BluetoothDeviceRequestTypeR\vrequestType\x12(\n" + + "\x10has_address_type\x18\x03 \x01(\bR\x0ehasAddressType\x12!\n" + + "\faddress_type\x18\x04 \x01(\rR\vaddressType:\x1c\xe0@D\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"\xa1\x01\n" + + "!BluetoothDeviceConnectionResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x1c\n" + + "\tconnected\x18\x02 \x01(\bR\tconnected\x12\x10\n" + + "\x03mtu\x18\x03 \x01(\rR\x03mtu\x12\x14\n" + + "\x05error\x18\x04 \x01(\x05R\x05error:\x1c\xe0@E\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"Y\n" + + "\x1fBluetoothGATTGetServicesRequest\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress:\x1c\xe0@F\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"n\n" + + "\x17BluetoothGATTDescriptor\x12\x1c\n" + + "\x04uuid\x18\x01 \x03(\x04B\b\xb8\xb5\x18\x02ȵ\x18\x01R\x04uuid\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle\x12\x1d\n" + + "\n" + + "short_uuid\x18\x03 \x01(\rR\tshortUuid\"\xd4\x01\n" + + "\x1bBluetoothGATTCharacteristic\x12\x1c\n" + + "\x04uuid\x18\x01 \x03(\x04B\b\xb8\xb5\x18\x02ȵ\x18\x01R\x04uuid\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle\x12\x1e\n" + + "\n" + + "properties\x18\x03 \x01(\rR\n" + + "properties\x12@\n" + + "\vdescriptors\x18\x04 \x03(\v2\x18.BluetoothGATTDescriptorB\x04\xe8\xb5\x18\x01R\vdescriptors\x12\x1d\n" + + "\n" + + "short_uuid\x18\x05 \x01(\rR\tshortUuid\"\xb9\x01\n" + + "\x14BluetoothGATTService\x12\x1c\n" + + "\x04uuid\x18\x01 \x03(\x04B\b\xb8\xb5\x18\x02ȵ\x18\x01R\x04uuid\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle\x12L\n" + + "\x0fcharacteristics\x18\x03 \x03(\v2\x1c.BluetoothGATTCharacteristicB\x04\xe8\xb5\x18\x01R\x0fcharacteristics\x12\x1d\n" + + "\n" + + "short_uuid\x18\x04 \x01(\rR\tshortUuid\"\x8d\x01\n" + + " BluetoothGATTGetServicesResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x121\n" + + "\bservices\x18\x02 \x03(\v2\x15.BluetoothGATTServiceR\bservices:\x1c\xe0@G\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"^\n" + + "$BluetoothGATTGetServicesDoneResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress:\x1c\xe0@H\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"j\n" + + "\x18BluetoothGATTReadRequest\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle:\x1c\xe0@I\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"\x7f\n" + + "\x19BluetoothGATTReadResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle\x12\x12\n" + + "\x04data\x18\x03 \x01(\fR\x04data:\x1c\xe0@J\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"\x9b\x01\n" + + "\x19BluetoothGATTWriteRequest\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle\x12\x1a\n" + + "\bresponse\x18\x03 \x01(\bR\bresponse\x12\x12\n" + + "\x04data\x18\x04 \x01(\fR\x04data:\x1c\xe0@K\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"t\n" + + "\"BluetoothGATTReadDescriptorRequest\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle:\x1c\xe0@L\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"\x89\x01\n" + + "#BluetoothGATTWriteDescriptorRequest\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle\x12\x12\n" + + "\x04data\x18\x03 \x01(\fR\x04data:\x1c\xe0@M\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"\x84\x01\n" + + "\x1aBluetoothGATTNotifyRequest\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle\x12\x16\n" + + "\x06enable\x18\x03 \x01(\bR\x06enable:\x1c\xe0@N\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"\x85\x01\n" + + "\x1fBluetoothGATTNotifyDataResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle\x12\x12\n" + + "\x04data\x18\x03 \x01(\fR\x04data:\x1c\xe0@O\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"H\n" + + "(SubscribeBluetoothConnectionsFreeRequest:\x1c\xe0@P\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"\xb1\x01\n" + + " BluetoothConnectionsFreeResponse\x12\x12\n" + + "\x04free\x18\x01 \x01(\rR\x04free\x12\x14\n" + + "\x05limit\x18\x02 \x01(\rR\x05limit\x12E\n" + + "\tallocated\x18\x03 \x03(\x04B'ȵ\x18\x01ҵ\x18\x1fBLUETOOTH_PROXY_MAX_CONNECTIONSR\tallocated:\x1c\xe0@Q\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"\x82\x01\n" + + "\x1aBluetoothGATTErrorResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle\x12\x14\n" + + "\x05error\x18\x03 \x01(\x05R\x05error:\x1c\xe0@R\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"l\n" + + "\x1aBluetoothGATTWriteResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle:\x1c\xe0@S\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"m\n" + + "\x1bBluetoothGATTNotifyResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x16\n" + + "\x06handle\x18\x02 \x01(\rR\x06handle:\x1c\xe0@T\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"\x86\x01\n" + + "\x1eBluetoothDevicePairingResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x16\n" + + "\x06paired\x18\x02 \x01(\bR\x06paired\x12\x14\n" + + "\x05error\x18\x03 \x01(\x05R\x05error:\x1c\xe0@U\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"\x8a\x01\n" + + " BluetoothDeviceUnpairingResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x18\n" + + "\asuccess\x18\x02 \x01(\bR\asuccess\x12\x14\n" + + "\x05error\x18\x03 \x01(\x05R\x05error:\x1c\xe0@V\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"K\n" + + "+UnsubscribeBluetoothLEAdvertisementsRequest:\x1c\xe0@W\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"\x8b\x01\n" + + "!BluetoothDeviceClearCacheResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x18\n" + + "\asuccess\x18\x02 \x01(\bR\asuccess\x12\x14\n" + + "\x05error\x18\x03 \x01(\x05R\x05error:\x1c\xe0@X\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"\xd6\x01\n" + + "\x1dBluetoothScannerStateResponse\x12,\n" + + "\x05state\x18\x01 \x01(\x0e2\x16.BluetoothScannerStateR\x05state\x12)\n" + + "\x04mode\x18\x02 \x01(\x0e2\x15.BluetoothScannerModeR\x04mode\x12>\n" + + "\x0fconfigured_mode\x18\x03 \x01(\x0e2\x15.BluetoothScannerModeR\x0econfiguredMode:\x1c\xe0@~\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY\"i\n" + + "\x1eBluetoothScannerSetModeRequest\x12)\n" + + "\x04mode\x18\x01 \x01(\x0e2\x15.BluetoothScannerModeR\x04mode:\x1c\xe0@\x7f\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"r\n" + + "\x1eSubscribeVoiceAssistantRequest\x12\x1c\n" + + "\tsubscribe\x18\x01 \x01(\bR\tsubscribe\x12\x14\n" + + "\x05flags\x18\x02 \x01(\rR\x05flags:\x1c\xe0@Y\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"\x9f\x01\n" + + "\x1bVoiceAssistantAudioSettings\x126\n" + + "\x17noise_suppression_level\x18\x01 \x01(\rR\x15noiseSuppressionLevel\x12\x1b\n" + + "\tauto_gain\x18\x02 \x01(\rR\bautoGain\x12+\n" + + "\x11volume_multiplier\x18\x03 \x01(\x02R\x10volumeMultiplier\"\xf9\x01\n" + + "\x15VoiceAssistantRequest\x12\x14\n" + + "\x05start\x18\x01 \x01(\bR\x05start\x12'\n" + + "\x0fconversation_id\x18\x02 \x01(\tR\x0econversationId\x12\x14\n" + + "\x05flags\x18\x03 \x01(\rR\x05flags\x12C\n" + + "\x0eaudio_settings\x18\x04 \x01(\v2\x1c.VoiceAssistantAudioSettingsR\raudioSettings\x12(\n" + + "\x10wake_word_phrase\x18\x05 \x01(\tR\x0ewakeWordPhrase:\x1c\xe0@Z\xe8@\x01\xf2@\x13USE_VOICE_ASSISTANT\"`\n" + + "\x16VoiceAssistantResponse\x12\x12\n" + + "\x04port\x18\x01 \x01(\rR\x04port\x12\x14\n" + + "\x05error\x18\x02 \x01(\bR\x05error:\x1c\xe0@[\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"C\n" + + "\x17VoiceAssistantEventData\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"\x9e\x01\n" + + "\x1bVoiceAssistantEventResponse\x123\n" + + "\n" + + "event_type\x18\x01 \x01(\x0e2\x14.VoiceAssistantEventR\teventType\x12,\n" + + "\x04data\x18\x02 \x03(\v2\x18.VoiceAssistantEventDataR\x04data:\x1c\xe0@\\\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"{\n" + + "\x13VoiceAssistantAudio\x12\x18\n" + + "\x04data\x18\x01 \x01(\fB\x04\xe0\xb5\x18\x01R\x04data\x12\x10\n" + + "\x03end\x18\x02 \x01(\bR\x03end\x12\x1a\n" + + "\x05data2\x18\x03 \x01(\fB\x04\xe0\xb5\x18\x01R\x05data2:\x1c\xe0@j\xe8@\x00\xf2@\x13USE_VOICE_ASSISTANT\"\x8e\x02\n" + + " VoiceAssistantTimerEventResponse\x128\n" + + "\n" + + "event_type\x18\x01 \x01(\x0e2\x19.VoiceAssistantTimerEventR\teventType\x12\x19\n" + + "\btimer_id\x18\x02 \x01(\tR\atimerId\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12#\n" + + "\rtotal_seconds\x18\x04 \x01(\rR\ftotalSeconds\x12!\n" + + "\fseconds_left\x18\x05 \x01(\rR\vsecondsLeft\x12\x1b\n" + + "\tis_active\x18\x06 \x01(\bR\bisActive:\x1c\xe0@s\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"\xcd\x01\n" + + "\x1dVoiceAssistantAnnounceRequest\x12\x19\n" + + "\bmedia_id\x18\x01 \x01(\tR\amediaId\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\x120\n" + + "\x14preannounce_media_id\x18\x03 \x01(\tR\x12preannounceMediaId\x12-\n" + + "\x12start_conversation\x18\x04 \x01(\bR\x11startConversation:\x1c\xe0@w\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"X\n" + + "\x1eVoiceAssistantAnnounceFinished\x12\x18\n" + + "\asuccess\x18\x01 \x01(\bR\asuccess:\x1c\xe0@x\xe8@\x01\xf2@\x13USE_VOICE_ASSISTANT\"r\n" + + "\x16VoiceAssistantWakeWord\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x1b\n" + + "\twake_word\x18\x02 \x01(\tR\bwakeWord\x12+\n" + + "\x11trained_languages\x18\x03 \x03(\tR\x10trainedLanguages\"\xe9\x01\n" + + "\x1eVoiceAssistantExternalWakeWord\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x1b\n" + + "\twake_word\x18\x02 \x01(\tR\bwakeWord\x12+\n" + + "\x11trained_languages\x18\x03 \x03(\tR\x10trainedLanguages\x12\x1d\n" + + "\n" + + "model_type\x18\x04 \x01(\tR\tmodelType\x12\x1d\n" + + "\n" + + "model_size\x18\x05 \x01(\rR\tmodelSize\x12\x1d\n" + + "\n" + + "model_hash\x18\x06 \x01(\tR\tmodelHash\x12\x10\n" + + "\x03url\x18\a \x01(\tR\x03url\"\x93\x01\n" + + "\"VoiceAssistantConfigurationRequest\x12O\n" + + "\x13external_wake_words\x18\x01 \x03(\v2\x1f.VoiceAssistantExternalWakeWordR\x11externalWakeWords:\x1c\xe0@y\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"\xfe\x01\n" + + "#VoiceAssistantConfigurationResponse\x12I\n" + + "\x14available_wake_words\x18\x01 \x03(\v2\x17.VoiceAssistantWakeWordR\x12availableWakeWords\x12;\n" + + "\x11active_wake_words\x18\x02 \x03(\tB\x0f\x8a\xb5\x18\vstd::vectorR\x0factiveWakeWords\x121\n" + + "\x15max_active_wake_words\x18\x03 \x01(\rR\x12maxActiveWakeWords:\x1c\xe0@z\xe8@\x01\xf2@\x13USE_VOICE_ASSISTANT\"j\n" + + "\x1eVoiceAssistantSetConfiguration\x12*\n" + + "\x11active_wake_words\x18\x01 \x03(\tR\x0factiveWakeWords:\x1c\xe0@{\xe8@\x02\xf2@\x13USE_VOICE_ASSISTANT\"\x8f\x04\n" + + "%ListEntitiesAlarmControlPanelResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12-\n" + + "\x12supported_features\x18\b \x01(\rR\x11supportedFeatures\x12#\n" + + "\rrequires_code\x18\t \x01(\bR\frequiresCode\x12/\n" + + "\x14requires_code_to_arm\x18\n" + + " \x01(\bR\x11requiresCodeToArm\x12+\n" + + "\tdevice_id\x18\v \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:;\xe0@^\xe8@\x01\xf2@\x17USE_ALARM_CONTROL_PANEL\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xd5\x01\n" + + "\x1eAlarmControlPanelStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12-\n" + + "\x05state\x18\x02 \x01(\x0e2\x17.AlarmControlPanelStateR\x05state\x12+\n" + + "\tdevice_id\x18\x03 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:?\xe0@_\xe8@\x01\xf2@\x17USE_ALARM_CONTROL_PANEL\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xef\x01\n" + + "\x1fAlarmControlPanelCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x128\n" + + "\acommand\x18\x02 \x01(\x0e2\x1e.AlarmControlPanelStateCommandR\acommand\x12\x12\n" + + "\x04code\x18\x03 \x01(\tR\x04code\x12+\n" + + "\tdevice_id\x18\x04 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:9\xe0@`\xe8@\x02\xf2@\x17USE_ALARM_CONTROL_PANEL\x80A\x01\x8aA\x13CommandProtoMessage\"\xe5\x03\n" + + "\x18ListEntitiesTextResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12\x1d\n" + + "\n" + + "min_length\x18\b \x01(\rR\tminLength\x12\x1d\n" + + "\n" + + "max_length\x18\t \x01(\rR\tmaxLength\x12\x18\n" + + "\apattern\x18\n" + + " \x01(\tR\apattern\x12\x1d\n" + + "\x04mode\x18\v \x01(\x0e2\t.TextModeR\x04mode\x12+\n" + + "\tdevice_id\x18\f \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:,\xe0@a\xe8@\x01\xf2@\bUSE_TEXT\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xc5\x01\n" + + "\x11TextStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\tR\x05state\x12#\n" + + "\rmissing_state\x18\x03 \x01(\bR\fmissingState\x12+\n" + + "\tdevice_id\x18\x04 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:0\xe0@b\xe8@\x01\xf2@\bUSE_TEXT\x80A\x01\x8aA\x19StateResponseProtoMessage\"\x9b\x01\n" + + "\x12TextCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x14\n" + + "\x05state\x18\x02 \x01(\tR\x05state\x12+\n" + + "\tdevice_id\x18\x03 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:*\xe0@c\xe8@\x02\xf2@\bUSE_TEXT\x80A\x01\x8aA\x13CommandProtoMessage\"\xf7\x02\n" + + "\x18ListEntitiesDateResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12+\n" + + "\tdevice_id\x18\b \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:5\xe0@d\xe8@\x01\xf2@\x11USE_DATETIME_DATE\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xf4\x01\n" + + "\x11DateStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12#\n" + + "\rmissing_state\x18\x02 \x01(\bR\fmissingState\x12\x12\n" + + "\x04year\x18\x03 \x01(\rR\x04year\x12\x14\n" + + "\x05month\x18\x04 \x01(\rR\x05month\x12\x10\n" + + "\x03day\x18\x05 \x01(\rR\x03day\x12+\n" + + "\tdevice_id\x18\x06 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:9\xe0@e\xe8@\x01\xf2@\x11USE_DATETIME_DATE\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xca\x01\n" + + "\x12DateCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x12\n" + + "\x04year\x18\x02 \x01(\rR\x04year\x12\x14\n" + + "\x05month\x18\x03 \x01(\rR\x05month\x12\x10\n" + + "\x03day\x18\x04 \x01(\rR\x03day\x12+\n" + + "\tdevice_id\x18\x05 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:3\xe0@f\xe8@\x02\xf2@\x11USE_DATETIME_DATE\x80A\x01\x8aA\x13CommandProtoMessage\"\xf7\x02\n" + + "\x18ListEntitiesTimeResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12+\n" + + "\tdevice_id\x18\b \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:5\xe0@g\xe8@\x01\xf2@\x11USE_DATETIME_TIME\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xfc\x01\n" + + "\x11TimeStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12#\n" + + "\rmissing_state\x18\x02 \x01(\bR\fmissingState\x12\x12\n" + + "\x04hour\x18\x03 \x01(\rR\x04hour\x12\x16\n" + + "\x06minute\x18\x04 \x01(\rR\x06minute\x12\x16\n" + + "\x06second\x18\x05 \x01(\rR\x06second\x12+\n" + + "\tdevice_id\x18\x06 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:9\xe0@h\xe8@\x01\xf2@\x11USE_DATETIME_TIME\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xd2\x01\n" + + "\x12TimeCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x12\n" + + "\x04hour\x18\x02 \x01(\rR\x04hour\x12\x16\n" + + "\x06minute\x18\x03 \x01(\rR\x06minute\x12\x16\n" + + "\x06second\x18\x04 \x01(\rR\x06second\x12+\n" + + "\tdevice_id\x18\x05 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:3\xe0@i\xe8@\x02\xf2@\x11USE_DATETIME_TIME\x80A\x01\x8aA\x13CommandProtoMessage\"\xd9\x03\n" + + "\x19ListEntitiesEventResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12'\n" + + "\fdevice_class\x18\b \x01(\tB\x04\x90\xb6\x18/R\vdeviceClass\x12>\n" + + "\vevent_types\x18\t \x03(\tB\x1d\xf2\xb5\x18\x19FixedVectorR\n" + + "eventTypes\x12+\n" + + "\tdevice_id\x18\n" + + " \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:-\xe0@k\xe8@\x01\xf2@\tUSE_EVENT\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xa3\x01\n" + + "\rEventResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1d\n" + + "\n" + + "event_type\x18\x02 \x01(\tR\teventType\x12+\n" + + "\tdevice_id\x18\x03 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:.\xe0@l\xe8@\x01\xf2@\tUSE_EVENT\x8aA\x19StateResponseProtoMessage\"\x90\x04\n" + + "\x19ListEntitiesValveResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12'\n" + + "\fdevice_class\x18\b \x01(\tB\x04\x90\xb6\x18/R\vdeviceClass\x12#\n" + + "\rassumed_state\x18\t \x01(\bR\fassumedState\x12+\n" + + "\x11supports_position\x18\n" + + " \x01(\bR\x10supportsPosition\x12#\n" + + "\rsupports_stop\x18\v \x01(\bR\fsupportsStop\x12+\n" + + "\tdevice_id\x18\f \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:-\xe0@m\xe8@\x01\xf2@\tUSE_VALVE\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xe6\x01\n" + + "\x12ValveStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1a\n" + + "\bposition\x18\x02 \x01(\x02R\bposition\x12<\n" + + "\x11current_operation\x18\x03 \x01(\x0e2\x0f.ValveOperationR\x10currentOperation\x12+\n" + + "\tdevice_id\x18\x04 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:1\xe0@n\xe8@\x01\xf2@\tUSE_VALVE\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xda\x01\n" + + "\x13ValveCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12!\n" + + "\fhas_position\x18\x02 \x01(\bR\vhasPosition\x12\x1a\n" + + "\bposition\x18\x03 \x01(\x02R\bposition\x12\x12\n" + + "\x04stop\x18\x04 \x01(\bR\x04stop\x12+\n" + + "\tdevice_id\x18\x05 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:+\xe0@o\xe8@\x02\xf2@\tUSE_VALVE\x80A\x01\x8aA\x13CommandProtoMessage\"\xff\x02\n" + + "\x1cListEntitiesDateTimeResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12+\n" + + "\tdevice_id\x18\b \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:9\xe0@p\xe8@\x01\xf2@\x15USE_DATETIME_DATETIME\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xe5\x01\n" + + "\x15DateTimeStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12#\n" + + "\rmissing_state\x18\x02 \x01(\bR\fmissingState\x12#\n" + + "\repoch_seconds\x18\x03 \x01(\aR\fepochSeconds\x12+\n" + + "\tdevice_id\x18\x04 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:=\xe0@q\xe8@\x01\xf2@\x15USE_DATETIME_DATETIME\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xbb\x01\n" + + "\x16DateTimeCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12#\n" + + "\repoch_seconds\x18\x02 \x01(\aR\fepochSeconds\x12+\n" + + "\tdevice_id\x18\x03 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:7\xe0@r\xe8@\x02\xf2@\x15USE_DATETIME_DATETIME\x80A\x01\x8aA\x13CommandProtoMessage\"\x9b\x03\n" + + "\x1aListEntitiesUpdateResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x05 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x06 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\a \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12'\n" + + "\fdevice_class\x18\b \x01(\tB\x04\x90\xb6\x18/R\vdeviceClass\x12+\n" + + "\tdevice_id\x18\t \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:.\xe0@t\xe8@\x01\xf2@\n" + + "USE_UPDATE\x8aA\x18InfoResponseProtoMessageJ\x04\b\x04\x10\x05\"\xc3\x03\n" + + "\x13UpdateStateResponse\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12#\n" + + "\rmissing_state\x18\x02 \x01(\bR\fmissingState\x12\x1f\n" + + "\vin_progress\x18\x03 \x01(\bR\n" + + "inProgress\x12!\n" + + "\fhas_progress\x18\x04 \x01(\bR\vhasProgress\x12\x1a\n" + + "\bprogress\x18\x05 \x01(\x02R\bprogress\x12'\n" + + "\x0fcurrent_version\x18\x06 \x01(\tR\x0ecurrentVersion\x12%\n" + + "\x0elatest_version\x18\a \x01(\tR\rlatestVersion\x12\x14\n" + + "\x05title\x18\b \x01(\tR\x05title\x12'\n" + + "\x0frelease_summary\x18\t \x01(\tR\x0ereleaseSummary\x12\x1f\n" + + "\vrelease_url\x18\n" + + " \x01(\tR\n" + + "releaseUrl\x12+\n" + + "\tdevice_id\x18\v \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:2\xe0@u\xe8@\x01\xf2@\n" + + "USE_UPDATE\x80A\x01\x8aA\x19StateResponseProtoMessage\"\xb3\x01\n" + + "\x14UpdateCommandRequest\x12\x16\n" + + "\x03key\x18\x01 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12(\n" + + "\acommand\x18\x02 \x01(\x0e2\x0e.UpdateCommandR\acommand\x12+\n" + + "\tdevice_id\x18\x03 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId:,\xe0@v\xe8@\x02\xf2@\n" + + "USE_UPDATE\x80A\x01\x8aA\x13CommandProtoMessage\"F\n" + + "\x0fZWaveProxyFrame\x12\x12\n" + + "\x04data\x18\x01 \x01(\fR\x04data:\x1f\xe0@\x80\x01\xe8@\x00\xf2@\x0fUSE_ZWAVE_PROXY\x80A\x01\x98A\x01\"n\n" + + "\x11ZWaveProxyRequest\x12*\n" + + "\x04type\x18\x01 \x01(\x0e2\x16.ZWaveProxyRequestTypeR\x04type\x12\x12\n" + + "\x04data\x18\x02 \x01(\fR\x04data:\x19\xe0@\x81\x01\xe8@\x00\xf2@\x0fUSE_ZWAVE_PROXY\"\xc4\x03\n" + + "\x1cListEntitiesInfraredResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x04 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x05 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\x06 \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12+\n" + + "\tdevice_id\x18\a \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId\x12\"\n" + + "\fcapabilities\x18\b \x01(\rR\fcapabilities\x12-\n" + + "\x12receiver_frequency\x18\t \x01(\rR\x11receiverFrequency:1\xe0@\x87\x01\xe8@\x01\xf2@\fUSE_INFRARED\x8aA\x18InfoResponseProtoMessage\"\xa8\x02\n" + + "#InfraredRFTransmitRawTimingsRequest\x12+\n" + + "\tdevice_id\x18\x01 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12+\n" + + "\x11carrier_frequency\x18\x03 \x01(\rR\x10carrierFrequency\x12!\n" + + "\frepeat_count\x18\x04 \x01(\rR\vrepeatCount\x12 \n" + + "\atimings\x18\x05 \x03(\x11B\x06\xf8\xb5\x18\x01\x10\x01R\atimings\x12\x1e\n" + + "\n" + + "modulation\x18\x06 \x01(\rR\n" + + "modulation:*\xe0@\x88\x01\xe8@\x02\xf2@ USE_IR_RF || USE_RADIO_FREQUENCY\"\xc5\x01\n" + + "\x16InfraredRFReceiveEvent\x12+\n" + + "\tdevice_id\x18\x01 \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x124\n" + + "\atimings\x18\x03 \x03(\x11B\x1a\xf2\xb5\x18\x14std::vector\x10\x01R\atimings:0\xe0@\x89\x01\xe8@\x01\xf2@ USE_IR_RF || USE_RADIO_FREQUENCY\x80A\x01\x98A\x01\"\xa1\x04\n" + + "\"ListEntitiesRadioFrequencyResponse\x12%\n" + + "\tobject_id\x18\x01 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\bobjectId\x12\x16\n" + + "\x03key\x18\x02 \x01(\aB\x04\x80\xb6\x18\x01R\x03key\x12\x1c\n" + + "\x04name\x18\x03 \x01(\tB\b\x80\xb6\x18\x01\x90\xb6\x18xR\x04name\x12*\n" + + "\x04icon\x18\x04 \x01(\tB\x16\x92A\x0fUSE_ENTITY_ICON\x90\xb6\x18?R\x04icon\x12.\n" + + "\x13disabled_by_default\x18\x05 \x01(\bR\x11disabledByDefault\x128\n" + + "\x0fentity_category\x18\x06 \x01(\x0e2\x0f.EntityCategoryR\x0eentityCategory\x12+\n" + + "\tdevice_id\x18\a \x01(\rB\x0e\x92A\vUSE_DEVICESR\bdeviceId\x12\"\n" + + "\fcapabilities\x18\b \x01(\rR\fcapabilities\x12#\n" + + "\rfrequency_min\x18\t \x01(\rR\ffrequencyMin\x12#\n" + + "\rfrequency_max\x18\n" + + " \x01(\rR\ffrequencyMax\x123\n" + + "\x15supported_modulations\x18\v \x01(\rR\x14supportedModulations:8\xe0@\x94\x01\xe8@\x01\xf2@\x13USE_RADIO_FREQUENCY\x8aA\x18InfoResponseProtoMessage\"\xfa\x01\n" + + "\x1bSerialProxyConfigureRequest\x12\x1a\n" + + "\binstance\x18\x01 \x01(\rR\binstance\x12\x1a\n" + + "\bbaudrate\x18\x02 \x01(\rR\bbaudrate\x12!\n" + + "\fflow_control\x18\x03 \x01(\bR\vflowControl\x12*\n" + + "\x06parity\x18\x04 \x01(\x0e2\x12.SerialProxyParityR\x06parity\x12\x1b\n" + + "\tstop_bits\x18\x05 \x01(\rR\bstopBits\x12\x1b\n" + + "\tdata_size\x18\x06 \x01(\rR\bdataSize:\x1a\xe0@\x8a\x01\xe8@\x02\xf2@\x10USE_SERIAL_PROXY\"k\n" + + "\x17SerialProxyDataReceived\x12\x1a\n" + + "\binstance\x18\x01 \x01(\rR\binstance\x12\x12\n" + + "\x04data\x18\x02 \x01(\fR\x04data: \xe0@\x8b\x01\xe8@\x01\xf2@\x10USE_SERIAL_PROXY\x80A\x01\x98A\x01\"h\n" + + "\x17SerialProxyWriteRequest\x12\x1a\n" + + "\binstance\x18\x01 \x01(\rR\binstance\x12\x12\n" + + "\x04data\x18\x02 \x01(\fR\x04data:\x1d\xe0@\x8c\x01\xe8@\x02\xf2@\x10USE_SERIAL_PROXY\x80A\x01\"y\n" + + "\x1eSerialProxySetModemPinsRequest\x12\x1a\n" + + "\binstance\x18\x01 \x01(\rR\binstance\x12\x1f\n" + + "\vline_states\x18\x02 \x01(\rR\n" + + "lineStates:\x1a\xe0@\x8d\x01\xe8@\x02\xf2@\x10USE_SERIAL_PROXY\"X\n" + + "\x1eSerialProxyGetModemPinsRequest\x12\x1a\n" + + "\binstance\x18\x01 \x01(\rR\binstance:\x1a\xe0@\x8e\x01\xe8@\x02\xf2@\x10USE_SERIAL_PROXY\"z\n" + + "\x1fSerialProxyGetModemPinsResponse\x12\x1a\n" + + "\binstance\x18\x01 \x01(\rR\binstance\x12\x1f\n" + + "\vline_states\x18\x02 \x01(\rR\n" + + "lineStates:\x1a\xe0@\x8f\x01\xe8@\x01\xf2@\x10USE_SERIAL_PROXY\"y\n" + + "\x12SerialProxyRequest\x12\x1a\n" + + "\binstance\x18\x01 \x01(\rR\binstance\x12+\n" + + "\x04type\x18\x02 \x01(\x0e2\x17.SerialProxyRequestTypeR\x04type:\x1a\xe0@\x90\x01\xe8@\x02\xf2@\x10USE_SERIAL_PROXY\"\xd2\x01\n" + + "\x1aSerialProxyRequestResponse\x12\x1a\n" + + "\binstance\x18\x01 \x01(\rR\binstance\x12+\n" + + "\x04type\x18\x02 \x01(\x0e2\x17.SerialProxyRequestTypeR\x04type\x12*\n" + + "\x06status\x18\x03 \x01(\x0e2\x12.SerialProxyStatusR\x06status\x12#\n" + + "\rerror_message\x18\x04 \x01(\tR\ferrorMessage:\x1a\xe0@\x93\x01\xe8@\x01\xf2@\x10USE_SERIAL_PROXY\"\xd8\x01\n" + + "#BluetoothSetConnectionParamsRequest\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12!\n" + + "\fmin_interval\x18\x02 \x01(\rR\vminInterval\x12!\n" + + "\fmax_interval\x18\x03 \x01(\rR\vmaxInterval\x12\x18\n" + + "\alatency\x18\x04 \x01(\rR\alatency\x12\x18\n" + + "\atimeout\x18\x05 \x01(\rR\atimeout:\x1d\xe0@\x91\x01\xe8@\x02\xf2@\x13USE_BLUETOOTH_PROXY\"u\n" + + "$BluetoothSetConnectionParamsResponse\x12\x18\n" + + "\aaddress\x18\x01 \x01(\x04R\aaddress\x12\x14\n" + + "\x05error\x18\x02 \x01(\x05R\x05error:\x1d\xe0@\x92\x01\xe8@\x01\xf2@\x13USE_BLUETOOTH_PROXY*`\n" + + "\x10DisconnectReason\x12!\n" + + "\x1dDISCONNECT_REASON_UNSPECIFIED\x10\x00\x12)\n" + + "%DISCONNECT_REASON_PROVISIONING_CLOSED\x10\x01*y\n" + + "\x13SerialProxyPortType\x12\x1e\n" + + "\x1aSERIAL_PROXY_PORT_TYPE_TTL\x10\x00\x12 \n" + + "\x1cSERIAL_PROXY_PORT_TYPE_RS232\x10\x01\x12 \n" + + "\x1cSERIAL_PROXY_PORT_TYPE_RS485\x10\x02*f\n" + + "\x0eEntityCategory\x12\x18\n" + + "\x14ENTITY_CATEGORY_NONE\x10\x00\x12\x1a\n" + + "\x16ENTITY_CATEGORY_CONFIG\x10\x01\x12\x1e\n" + + "\x1aENTITY_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" + + "\x0eCoverOperation\x12\x18\n" + + "\x14COVER_OPERATION_IDLE\x10\x00\x12\x1e\n" + + "\x1aCOVER_OPERATION_IS_OPENING\x10\x01\x12\x1e\n" + + "\x1aCOVER_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" + + "\bFanSpeed\x12\x11\n" + + "\rFAN_SPEED_LOW\x10\x00\x12\x14\n" + + "\x10FAN_SPEED_MEDIUM\x10\x01\x12\x12\n" + + "\x0eFAN_SPEED_HIGH\x10\x02\x1a\x02\x18\x01*D\n" + + "\fFanDirection\x12\x19\n" + + "\x15FAN_DIRECTION_FORWARD\x10\x00\x12\x19\n" + + "\x15FAN_DIRECTION_REVERSE\x10\x01*\xc7\x02\n" + + "\tColorMode\x12\x16\n" + + "\x12COLOR_MODE_UNKNOWN\x10\x00\x12\x15\n" + + "\x11COLOR_MODE_ON_OFF\x10\x01\x12 \n" + + "\x1cCOLOR_MODE_LEGACY_BRIGHTNESS\x10\x02\x12\x19\n" + + "\x15COLOR_MODE_BRIGHTNESS\x10\x03\x12\x14\n" + + "\x10COLOR_MODE_WHITE\x10\a\x12 \n" + + "\x1cCOLOR_MODE_COLOR_TEMPERATURE\x10\v\x12\x1e\n" + + "\x1aCOLOR_MODE_COLD_WARM_WHITE\x10\x13\x12\x12\n" + + "\x0eCOLOR_MODE_RGB\x10#\x12\x18\n" + + "\x14COLOR_MODE_RGB_WHITE\x10'\x12$\n" + + " COLOR_MODE_RGB_COLOR_TEMPERATURE\x10/\x12\"\n" + + "\x1eCOLOR_MODE_RGB_COLD_WARM_WHITE\x103*\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" + + "\bLogLevel\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\a*\x88\x01\n" + + "\vDSTRuleType\x12\x16\n" + + "\x12DST_RULE_TYPE_NONE\x10\x00\x12 \n" + + "\x1cDST_RULE_TYPE_MONTH_WEEK_DAY\x10\x01\x12 \n" + + "\x1cDST_RULE_TYPE_JULIAN_NO_LEAP\x10\x02\x12\x1d\n" + + "\x19DST_RULE_TYPE_DAY_OF_YEAR\x10\x03*\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\a*\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\x10d*m\n" + + "\x0fTemperatureUnit\x12\x1c\n" + + "\x18TEMPERATURE_UNIT_CELSIUS\x10\x00\x12\x1f\n" + + "\x1bTEMPERATURE_UNIT_FAHRENHEIT\x10\x01\x12\x1b\n" + + "\x17TEMPERATURE_UNIT_KELVIN\x10\x02*\xb5\x01\n" + + "\vClimateMode\x12\x14\n" + + "\x10CLIMATE_MODE_OFF\x10\x00\x12\x1a\n" + + "\x16CLIMATE_MODE_HEAT_COOL\x10\x01\x12\x15\n" + + "\x11CLIMATE_MODE_COOL\x10\x02\x12\x15\n" + + "\x11CLIMATE_MODE_HEAT\x10\x03\x12\x19\n" + + "\x15CLIMATE_MODE_FAN_ONLY\x10\x04\x12\x14\n" + + "\x10CLIMATE_MODE_DRY\x10\x05\x12\x15\n" + + "\x11CLIMATE_MODE_AUTO\x10\x06*\xf1\x01\n" + + "\x0eClimateFanMode\x12\x12\n" + + "\x0eCLIMATE_FAN_ON\x10\x00\x12\x13\n" + + "\x0fCLIMATE_FAN_OFF\x10\x01\x12\x14\n" + + "\x10CLIMATE_FAN_AUTO\x10\x02\x12\x13\n" + + "\x0fCLIMATE_FAN_LOW\x10\x03\x12\x16\n" + + "\x12CLIMATE_FAN_MEDIUM\x10\x04\x12\x14\n" + + "\x10CLIMATE_FAN_HIGH\x10\x05\x12\x16\n" + + "\x12CLIMATE_FAN_MIDDLE\x10\x06\x12\x15\n" + + "\x11CLIMATE_FAN_FOCUS\x10\a\x12\x17\n" + + "\x13CLIMATE_FAN_DIFFUSE\x10\b\x12\x15\n" + + "\x11CLIMATE_FAN_QUIET\x10\t*{\n" + + "\x10ClimateSwingMode\x12\x15\n" + + "\x11CLIMATE_SWING_OFF\x10\x00\x12\x16\n" + + "\x12CLIMATE_SWING_BOTH\x10\x01\x12\x1a\n" + + "\x16CLIMATE_SWING_VERTICAL\x10\x02\x12\x1c\n" + + "\x18CLIMATE_SWING_HORIZONTAL\x10\x03*\xca\x01\n" + + "\rClimateAction\x12\x16\n" + + "\x12CLIMATE_ACTION_OFF\x10\x00\x12\x1a\n" + + "\x16CLIMATE_ACTION_COOLING\x10\x02\x12\x1a\n" + + "\x16CLIMATE_ACTION_HEATING\x10\x03\x12\x17\n" + + "\x13CLIMATE_ACTION_IDLE\x10\x04\x12\x19\n" + + "\x15CLIMATE_ACTION_DRYING\x10\x05\x12\x16\n" + + "\x12CLIMATE_ACTION_FAN\x10\x06\x12\x1d\n" + + "\x19CLIMATE_ACTION_DEFROSTING\x10\a*\xdf\x01\n" + + "\rClimatePreset\x12\x17\n" + + "\x13CLIMATE_PRESET_NONE\x10\x00\x12\x17\n" + + "\x13CLIMATE_PRESET_HOME\x10\x01\x12\x17\n" + + "\x13CLIMATE_PRESET_AWAY\x10\x02\x12\x18\n" + + "\x14CLIMATE_PRESET_BOOST\x10\x03\x12\x1a\n" + + "\x16CLIMATE_PRESET_COMFORT\x10\x04\x12\x16\n" + + "\x12CLIMATE_PRESET_ECO\x10\x05\x12\x18\n" + + "\x14CLIMATE_PRESET_SLEEP\x10\x06\x12\x1b\n" + + "\x17CLIMATE_PRESET_ACTIVITY\x10\a*\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\b\x01\x123\n" + + "/WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_LOW\x10\b\x124\n" + + "0WATER_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" + + "\n" + + "NumberMode\x12\x14\n" + + "\x10NUMBER_MODE_AUTO\x10\x00\x12\x13\n" + + "\x0fNUMBER_MODE_BOX\x10\x01\x12\x16\n" + + "\x12NUMBER_MODE_SLIDER\x10\x02*\xc6\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\x12\x16\n" + + "\x12LOCK_STATE_OPENING\x10\x06\x12\x13\n" + + "\x0fLOCK_STATE_OPEN\x10\a*<\n" + + "\vLockCommand\x12\x0f\n" + + "\vLOCK_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\a\x12 \n" + + "\x1cMEDIA_PLAYER_COMMAND_ENQUEUE\x10\b\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\v\x12 \n" + + "\x1cMEDIA_PLAYER_COMMAND_TURN_ON\x10\f\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" + + "\x1aBluetoothDeviceRequestType\x12-\n" + + "%BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT\x10\x00\x1a\x02\b\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\x127\n" + + "3BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT_V3_WITH_CACHE\x10\x04\x12:\n" + + "6BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT_V3_WITHOUT_CACHE\x10\x05\x12-\n" + + ")BLUETOOTH_DEVICE_REQUEST_TYPE_CLEAR_CACHE\x10\x06*\xf3\x01\n" + + "\x15BluetoothScannerState\x12 \n" + + "\x1cBLUETOOTH_SCANNER_STATE_IDLE\x10\x00\x12$\n" + + " BLUETOOTH_SCANNER_STATE_STARTING\x10\x01\x12#\n" + + "\x1fBLUETOOTH_SCANNER_STATE_RUNNING\x10\x02\x12\"\n" + + "\x1eBLUETOOTH_SCANNER_STATE_FAILED\x10\x03\x12$\n" + + " BLUETOOTH_SCANNER_STATE_STOPPING\x10\x04\x12#\n" + + "\x1fBLUETOOTH_SCANNER_STATE_STOPPED\x10\x05*]\n" + + "\x14BluetoothScannerMode\x12\"\n" + + "\x1eBLUETOOTH_SCANNER_MODE_PASSIVE\x10\x00\x12!\n" + + "\x1dBLUETOOTH_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\a\x12\x1b\n" + + "\x17VOICE_ASSISTANT_TTS_END\x10\b\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\v\x12\x1f\n" + + "\x1bVOICE_ASSISTANT_STT_VAD_END\x10\f\x12$\n" + + " VOICE_ASSISTANT_TTS_STREAM_START\x10b\x12\"\n" + + "\x1eVOICE_ASSISTANT_TTS_STREAM_END\x10c\x12#\n" + + "\x1fVOICE_ASSISTANT_INTENT_PROGRESS\x10d*\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" + + "\x16AlarmControlPanelState\x12\x18\n" + + "\x14ALARM_STATE_DISARMED\x10\x00\x12\x1a\n" + + "\x16ALARM_STATE_ARMED_HOME\x10\x01\x12\x1a\n" + + "\x16ALARM_STATE_ARMED_AWAY\x10\x02\x12\x1b\n" + + "\x17ALARM_STATE_ARMED_NIGHT\x10\x03\x12\x1e\n" + + "\x1aALARM_STATE_ARMED_VACATION\x10\x04\x12#\n" + + "\x1fALARM_STATE_ARMED_CUSTOM_BYPASS\x10\x05\x12\x17\n" + + "\x13ALARM_STATE_PENDING\x10\x06\x12\x16\n" + + "\x12ALARM_STATE_ARMING\x10\a\x12\x19\n" + + "\x15ALARM_STATE_DISARMING\x10\b\x12\x19\n" + + "\x15ALARM_STATE_TRIGGERED\x10\t*\x98\x02\n" + + "\x1dAlarmControlPanelStateCommand\x12\x1e\n" + + "\x1aALARM_CONTROL_PANEL_DISARM\x10\x00\x12 \n" + + "\x1cALARM_CONTROL_PANEL_ARM_AWAY\x10\x01\x12 \n" + + "\x1cALARM_CONTROL_PANEL_ARM_HOME\x10\x02\x12!\n" + + "\x1dALARM_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" + + "\x1bALARM_CONTROL_PANEL_TRIGGER\x10\x06*6\n" + + "\bTextMode\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*l\n" + + "\x11SerialProxyParity\x12\x1c\n" + + "\x18SERIAL_PROXY_PARITY_NONE\x10\x00\x12\x1c\n" + + "\x18SERIAL_PROXY_PARITY_EVEN\x10\x01\x12\x1b\n" + + "\x17SERIAL_PROXY_PARITY_ODD\x10\x02*\x91\x01\n" + + "\x16SerialProxyRequestType\x12'\n" + + "#SERIAL_PROXY_REQUEST_TYPE_SUBSCRIBE\x10\x00\x12)\n" + + "%SERIAL_PROXY_REQUEST_TYPE_UNSUBSCRIBE\x10\x01\x12#\n" + + "\x1fSERIAL_PROXY_REQUEST_TYPE_FLUSH\x10\x02*\xbf\x01\n" + + "\x11SerialProxyStatus\x12\x1a\n" + + "\x16SERIAL_PROXY_STATUS_OK\x10\x00\x12'\n" + + "#SERIAL_PROXY_STATUS_ASSUMED_SUCCESS\x10\x01\x12\x1d\n" + + "\x19SERIAL_PROXY_STATUS_ERROR\x10\x02\x12\x1f\n" + + "\x1bSERIAL_PROXY_STATUS_TIMEOUT\x10\x03\x12%\n" + + "!SERIAL_PROXY_STATUS_NOT_SUPPORTED\x10\x042\x86\x1b\n" + + "\rAPIConnection\x12.\n" + + "\x05hello\x12\r.HelloRequest\x1a\x0e.HelloResponse\"\x06\xf0@\x00\xf8@\x00\x12=\n" + + "\n" + + "disconnect\x12\x12.DisconnectRequest\x1a\x13.DisconnectResponse\"\x06\xf0@\x00\xf8@\x00\x12+\n" + + "\x04ping\x12\f.PingRequest\x1a\r.PingResponse\"\x06\xf0@\x00\xf8@\x00\x12;\n" + + "\vdevice_info\x12\x12.DeviceInfoRequest\x1a\x13.DeviceInfoResponse\"\x03\xf8@\x00\x12.\n" + + "\rlist_entities\x12\x14.ListEntitiesRequest\x1a\x05.void\"\x00\x124\n" + + "\x10subscribe_states\x12\x17.SubscribeStatesRequest\x1a\x05.void\"\x00\x120\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\x122\n" + + "\x0fexecute_service\x12\x16.ExecuteServiceRequest\x1a\x05.void\"\x00\x12[\n" + + "\x18noise_encryption_set_key\x12\x1d.NoiseEncryptionSetKeyRequest\x1a\x1e.NoiseEncryptionSetKeyResponse\"\x00\x120\n" + + "\x0ebutton_command\x12\x15.ButtonCommandRequest\x1a\x05.void\"\x00\x12,\n" + + "\fcamera_image\x12\x13.CameraImageRequest\x1a\x05.void\"\x00\x122\n" + + "\x0fclimate_command\x12\x16.ClimateCommandRequest\x1a\x05.void\"\x00\x12.\n" + + "\rcover_command\x12\x14.CoverCommandRequest\x1a\x05.void\"\x00\x12,\n" + + "\fdate_command\x12\x13.DateCommandRequest\x1a\x05.void\"\x00\x124\n" + + "\x10datetime_command\x12\x17.DateTimeCommandRequest\x1a\x05.void\"\x00\x12*\n" + + "\vfan_command\x12\x12.FanCommandRequest\x1a\x05.void\"\x00\x12.\n" + + "\rlight_command\x12\x14.LightCommandRequest\x1a\x05.void\"\x00\x12,\n" + + "\flock_command\x12\x13.LockCommandRequest\x1a\x05.void\"\x00\x12;\n" + + "\x14media_player_command\x12\x1a.MediaPlayerCommandRequest\x1a\x05.void\"\x00\x120\n" + + "\x0enumber_command\x12\x15.NumberCommandRequest\x1a\x05.void\"\x00\x120\n" + + "\x0eselect_command\x12\x15.SelectCommandRequest\x1a\x05.void\"\x00\x12.\n" + + "\rsiren_command\x12\x14.SirenCommandRequest\x1a\x05.void\"\x00\x120\n" + + "\x0eswitch_command\x12\x15.SwitchCommandRequest\x1a\x05.void\"\x00\x12,\n" + + "\ftext_command\x12\x13.TextCommandRequest\x1a\x05.void\"\x00\x12,\n" + + "\ftime_command\x12\x13.TimeCommandRequest\x1a\x05.void\"\x00\x120\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" + + "\x18bluetooth_device_request\x12\x17.BluetoothDeviceRequest\x1a\x05.void\"\x00\x12H\n" + + "\x1bbluetooth_gatt_get_services\x12 .BluetoothGATTGetServicesRequest\x1a\x05.void\"\x00\x129\n" + + "\x13bluetooth_gatt_read\x12\x19.BluetoothGATTReadRequest\x1a\x05.void\"\x00\x12;\n" + + "\x14bluetooth_gatt_write\x12\x1a.BluetoothGATTWriteRequest\x1a\x05.void\"\x00\x12N\n" + + "\x1ebluetooth_gatt_read_descriptor\x12#.BluetoothGATTReadDescriptorRequest\x1a\x05.void\"\x00\x12P\n" + + "\x1fbluetooth_gatt_write_descriptor\x12$.BluetoothGATTWriteDescriptorRequest\x1a\x05.void\"\x00\x12=\n" + + "\x15bluetooth_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\x12F\n" + + "\x1abluetooth_scanner_set_mode\x12\x1f.BluetoothScannerSetModeRequest\x1a\x05.void\"\x00\x12p\n" + + "\x1fbluetooth_set_connection_params\x12$.BluetoothSetConnectionParamsRequest\x1a%.BluetoothSetConnectionParamsResponse\"\x00\x12E\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" + + "\x1balarm_control_panel_command\x12 .AlarmControlPanelCommandRequest\x1a\x05.void\"\x00\x12.\n" + + "\x11zwave_proxy_frame\x12\x10.ZWaveProxyFrame\x1a\x05.void\"\x00\x122\n" + + "\x13zwave_proxy_request\x12\x12.ZWaveProxyRequest\x1a\x05.void\"\x00\x12Q\n" + + " infrared_rf_transmit_raw_timings\x12$.InfraredRFTransmitRawTimingsRequest\x1a\x05.void\"\x00\x12?\n" + + "\x16serial_proxy_configure\x12\x1c.SerialProxyConfigureRequest\x1a\x05.void\"\x00\x127\n" + + "\x12serial_proxy_write\x12\x18.SerialProxyWriteRequest\x1a\x05.void\"\x00\x12G\n" + + "\x1bserial_proxy_set_modem_pins\x12\x1f.SerialProxySetModemPinsRequest\x1a\x05.void\"\x00\x12G\n" + + "\x1bserial_proxy_get_modem_pins\x12\x1f.SerialProxyGetModemPinsRequest\x1a\x05.void\"\x00\x124\n" + + "\x14serial_proxy_request\x12\x13.SerialProxyRequest\x1a\x05.void\"\x00b\x06proto3" var ( file_api_proto_rawDescOnce sync.Once - file_api_proto_rawDescData = file_api_proto_rawDesc + file_api_proto_rawDescData []byte ) func file_api_proto_rawDescGZIP() []byte { file_api_proto_rawDescOnce.Do(func() { - file_api_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_proto_rawDescData) + file_api_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_proto_rawDesc), len(file_api_proto_rawDesc))) }) return file_api_proto_rawDescData } -var file_api_proto_enumTypes = make([]protoimpl.EnumInfo, 29) -var file_api_proto_msgTypes = make([]protoimpl.MessageInfo, 121) -var file_api_proto_goTypes = []interface{}{ - (EntityCategory)(0), // 0: EntityCategory - (LegacyCoverState)(0), // 1: LegacyCoverState - (CoverOperation)(0), // 2: CoverOperation - (LegacyCoverCommand)(0), // 3: LegacyCoverCommand - (FanSpeed)(0), // 4: FanSpeed - (FanDirection)(0), // 5: FanDirection - (ColorMode)(0), // 6: ColorMode - (SensorStateClass)(0), // 7: SensorStateClass - (SensorLastResetType)(0), // 8: SensorLastResetType - (LogLevel)(0), // 9: LogLevel - (ServiceArgType)(0), // 10: ServiceArgType - (ClimateMode)(0), // 11: ClimateMode - (ClimateFanMode)(0), // 12: ClimateFanMode - (ClimateSwingMode)(0), // 13: ClimateSwingMode - (ClimateAction)(0), // 14: ClimateAction - (ClimatePreset)(0), // 15: ClimatePreset - (NumberMode)(0), // 16: NumberMode - (LockState)(0), // 17: LockState - (LockCommand)(0), // 18: LockCommand - (MediaPlayerState)(0), // 19: MediaPlayerState - (MediaPlayerCommand)(0), // 20: MediaPlayerCommand - (BluetoothDeviceRequestType)(0), // 21: BluetoothDeviceRequestType - (VoiceAssistantSubscribeFlag)(0), // 22: VoiceAssistantSubscribeFlag - (VoiceAssistantRequestFlag)(0), // 23: VoiceAssistantRequestFlag - (VoiceAssistantEvent)(0), // 24: VoiceAssistantEvent - (AlarmControlPanelState)(0), // 25: AlarmControlPanelState - (AlarmControlPanelStateCommand)(0), // 26: AlarmControlPanelStateCommand - (TextMode)(0), // 27: TextMode - (ValveOperation)(0), // 28: ValveOperation - (*HelloRequest)(nil), // 29: HelloRequest - (*HelloResponse)(nil), // 30: HelloResponse - (*ConnectRequest)(nil), // 31: ConnectRequest - (*ConnectResponse)(nil), // 32: ConnectResponse - (*DisconnectRequest)(nil), // 33: DisconnectRequest - (*DisconnectResponse)(nil), // 34: DisconnectResponse - (*PingRequest)(nil), // 35: PingRequest - (*PingResponse)(nil), // 36: PingResponse - (*DeviceInfoRequest)(nil), // 37: DeviceInfoRequest - (*DeviceInfoResponse)(nil), // 38: DeviceInfoResponse - (*ListEntitiesRequest)(nil), // 39: ListEntitiesRequest - (*ListEntitiesDoneResponse)(nil), // 40: ListEntitiesDoneResponse - (*SubscribeStatesRequest)(nil), // 41: SubscribeStatesRequest - (*ListEntitiesBinarySensorResponse)(nil), // 42: ListEntitiesBinarySensorResponse - (*BinarySensorStateResponse)(nil), // 43: BinarySensorStateResponse - (*ListEntitiesCoverResponse)(nil), // 44: ListEntitiesCoverResponse - (*CoverStateResponse)(nil), // 45: CoverStateResponse - (*CoverCommandRequest)(nil), // 46: CoverCommandRequest - (*ListEntitiesFanResponse)(nil), // 47: ListEntitiesFanResponse - (*FanStateResponse)(nil), // 48: FanStateResponse - (*FanCommandRequest)(nil), // 49: FanCommandRequest - (*ListEntitiesLightResponse)(nil), // 50: ListEntitiesLightResponse - (*LightStateResponse)(nil), // 51: LightStateResponse - (*LightCommandRequest)(nil), // 52: LightCommandRequest - (*ListEntitiesSensorResponse)(nil), // 53: ListEntitiesSensorResponse - (*SensorStateResponse)(nil), // 54: SensorStateResponse - (*ListEntitiesSwitchResponse)(nil), // 55: ListEntitiesSwitchResponse - (*SwitchStateResponse)(nil), // 56: SwitchStateResponse - (*SwitchCommandRequest)(nil), // 57: SwitchCommandRequest - (*ListEntitiesTextSensorResponse)(nil), // 58: ListEntitiesTextSensorResponse - (*TextSensorStateResponse)(nil), // 59: TextSensorStateResponse - (*SubscribeLogsRequest)(nil), // 60: SubscribeLogsRequest - (*SubscribeLogsResponse)(nil), // 61: SubscribeLogsResponse - (*SubscribeHomeassistantServicesRequest)(nil), // 62: SubscribeHomeassistantServicesRequest - (*HomeassistantServiceMap)(nil), // 63: HomeassistantServiceMap - (*HomeassistantServiceResponse)(nil), // 64: HomeassistantServiceResponse - (*SubscribeHomeAssistantStatesRequest)(nil), // 65: SubscribeHomeAssistantStatesRequest - (*SubscribeHomeAssistantStateResponse)(nil), // 66: SubscribeHomeAssistantStateResponse - (*HomeAssistantStateResponse)(nil), // 67: HomeAssistantStateResponse - (*GetTimeRequest)(nil), // 68: GetTimeRequest - (*GetTimeResponse)(nil), // 69: GetTimeResponse - (*ListEntitiesServicesArgument)(nil), // 70: ListEntitiesServicesArgument - (*ListEntitiesServicesResponse)(nil), // 71: ListEntitiesServicesResponse - (*ExecuteServiceArgument)(nil), // 72: ExecuteServiceArgument - (*ExecuteServiceRequest)(nil), // 73: ExecuteServiceRequest - (*ListEntitiesCameraResponse)(nil), // 74: ListEntitiesCameraResponse - (*CameraImageResponse)(nil), // 75: CameraImageResponse - (*CameraImageRequest)(nil), // 76: CameraImageRequest - (*ListEntitiesClimateResponse)(nil), // 77: ListEntitiesClimateResponse - (*ClimateStateResponse)(nil), // 78: ClimateStateResponse - (*ClimateCommandRequest)(nil), // 79: ClimateCommandRequest - (*ListEntitiesNumberResponse)(nil), // 80: ListEntitiesNumberResponse - (*NumberStateResponse)(nil), // 81: NumberStateResponse - (*NumberCommandRequest)(nil), // 82: NumberCommandRequest - (*ListEntitiesSelectResponse)(nil), // 83: ListEntitiesSelectResponse - (*SelectStateResponse)(nil), // 84: SelectStateResponse - (*SelectCommandRequest)(nil), // 85: SelectCommandRequest - (*ListEntitiesLockResponse)(nil), // 86: ListEntitiesLockResponse - (*LockStateResponse)(nil), // 87: LockStateResponse - (*LockCommandRequest)(nil), // 88: LockCommandRequest - (*ListEntitiesButtonResponse)(nil), // 89: ListEntitiesButtonResponse - (*ButtonCommandRequest)(nil), // 90: ButtonCommandRequest - (*ListEntitiesMediaPlayerResponse)(nil), // 91: ListEntitiesMediaPlayerResponse - (*MediaPlayerStateResponse)(nil), // 92: MediaPlayerStateResponse - (*MediaPlayerCommandRequest)(nil), // 93: MediaPlayerCommandRequest - (*SubscribeBluetoothLEAdvertisementsRequest)(nil), // 94: SubscribeBluetoothLEAdvertisementsRequest - (*BluetoothServiceData)(nil), // 95: BluetoothServiceData - (*BluetoothLEAdvertisementResponse)(nil), // 96: BluetoothLEAdvertisementResponse - (*BluetoothLERawAdvertisement)(nil), // 97: BluetoothLERawAdvertisement - (*BluetoothLERawAdvertisementsResponse)(nil), // 98: BluetoothLERawAdvertisementsResponse - (*BluetoothDeviceRequest)(nil), // 99: BluetoothDeviceRequest - (*BluetoothDeviceConnectionResponse)(nil), // 100: BluetoothDeviceConnectionResponse - (*BluetoothGATTGetServicesRequest)(nil), // 101: BluetoothGATTGetServicesRequest - (*BluetoothGATTDescriptor)(nil), // 102: BluetoothGATTDescriptor - (*BluetoothGATTCharacteristic)(nil), // 103: BluetoothGATTCharacteristic - (*BluetoothGATTService)(nil), // 104: BluetoothGATTService - (*BluetoothGATTGetServicesResponse)(nil), // 105: BluetoothGATTGetServicesResponse - (*BluetoothGATTGetServicesDoneResponse)(nil), // 106: BluetoothGATTGetServicesDoneResponse - (*BluetoothGATTReadRequest)(nil), // 107: BluetoothGATTReadRequest - (*BluetoothGATTReadResponse)(nil), // 108: BluetoothGATTReadResponse - (*BluetoothGATTWriteRequest)(nil), // 109: BluetoothGATTWriteRequest - (*BluetoothGATTReadDescriptorRequest)(nil), // 110: BluetoothGATTReadDescriptorRequest - (*BluetoothGATTWriteDescriptorRequest)(nil), // 111: BluetoothGATTWriteDescriptorRequest - (*BluetoothGATTNotifyRequest)(nil), // 112: BluetoothGATTNotifyRequest - (*BluetoothGATTNotifyDataResponse)(nil), // 113: BluetoothGATTNotifyDataResponse - (*SubscribeBluetoothConnectionsFreeRequest)(nil), // 114: SubscribeBluetoothConnectionsFreeRequest - (*BluetoothConnectionsFreeResponse)(nil), // 115: BluetoothConnectionsFreeResponse - (*BluetoothGATTErrorResponse)(nil), // 116: BluetoothGATTErrorResponse - (*BluetoothGATTWriteResponse)(nil), // 117: BluetoothGATTWriteResponse - (*BluetoothGATTNotifyResponse)(nil), // 118: BluetoothGATTNotifyResponse - (*BluetoothDevicePairingResponse)(nil), // 119: BluetoothDevicePairingResponse - (*BluetoothDeviceUnpairingResponse)(nil), // 120: BluetoothDeviceUnpairingResponse - (*UnsubscribeBluetoothLEAdvertisementsRequest)(nil), // 121: UnsubscribeBluetoothLEAdvertisementsRequest - (*BluetoothDeviceClearCacheResponse)(nil), // 122: BluetoothDeviceClearCacheResponse - (*SubscribeVoiceAssistantRequest)(nil), // 123: SubscribeVoiceAssistantRequest - (*VoiceAssistantAudioSettings)(nil), // 124: VoiceAssistantAudioSettings - (*VoiceAssistantRequest)(nil), // 125: VoiceAssistantRequest - (*VoiceAssistantResponse)(nil), // 126: VoiceAssistantResponse - (*VoiceAssistantEventData)(nil), // 127: VoiceAssistantEventData - (*VoiceAssistantEventResponse)(nil), // 128: VoiceAssistantEventResponse - (*VoiceAssistantAudio)(nil), // 129: VoiceAssistantAudio - (*ListEntitiesAlarmControlPanelResponse)(nil), // 130: ListEntitiesAlarmControlPanelResponse - (*AlarmControlPanelStateResponse)(nil), // 131: AlarmControlPanelStateResponse - (*AlarmControlPanelCommandRequest)(nil), // 132: AlarmControlPanelCommandRequest - (*ListEntitiesTextResponse)(nil), // 133: ListEntitiesTextResponse - (*TextStateResponse)(nil), // 134: TextStateResponse - (*TextCommandRequest)(nil), // 135: TextCommandRequest - (*ListEntitiesDateResponse)(nil), // 136: ListEntitiesDateResponse - (*DateStateResponse)(nil), // 137: DateStateResponse - (*DateCommandRequest)(nil), // 138: DateCommandRequest - (*ListEntitiesTimeResponse)(nil), // 139: ListEntitiesTimeResponse - (*TimeStateResponse)(nil), // 140: TimeStateResponse - (*TimeCommandRequest)(nil), // 141: TimeCommandRequest - (*ListEntitiesEventResponse)(nil), // 142: ListEntitiesEventResponse - (*EventResponse)(nil), // 143: EventResponse - (*ListEntitiesValveResponse)(nil), // 144: ListEntitiesValveResponse - (*ValveStateResponse)(nil), // 145: ValveStateResponse - (*ValveCommandRequest)(nil), // 146: ValveCommandRequest - (*ListEntitiesDateTimeResponse)(nil), // 147: ListEntitiesDateTimeResponse - (*DateTimeStateResponse)(nil), // 148: DateTimeStateResponse - (*DateTimeCommandRequest)(nil), // 149: DateTimeCommandRequest - (*Void)(nil), // 150: void +var file_api_proto_enumTypes = make([]protoimpl.EnumInfo, 45) +var file_api_proto_msgTypes = make([]protoimpl.MessageInfo, 166) +var file_api_proto_goTypes = []any{ + (DisconnectReason)(0), // 0: DisconnectReason + (SerialProxyPortType)(0), // 1: SerialProxyPortType + (EntityCategory)(0), // 2: EntityCategory + (LegacyCoverState)(0), // 3: LegacyCoverState + (CoverOperation)(0), // 4: CoverOperation + (LegacyCoverCommand)(0), // 5: LegacyCoverCommand + (FanSpeed)(0), // 6: FanSpeed + (FanDirection)(0), // 7: FanDirection + (ColorMode)(0), // 8: ColorMode + (SensorStateClass)(0), // 9: SensorStateClass + (SensorLastResetType)(0), // 10: SensorLastResetType + (LogLevel)(0), // 11: LogLevel + (DSTRuleType)(0), // 12: DSTRuleType + (ServiceArgType)(0), // 13: ServiceArgType + (SupportsResponseType)(0), // 14: SupportsResponseType + (TemperatureUnit)(0), // 15: TemperatureUnit + (ClimateMode)(0), // 16: ClimateMode + (ClimateFanMode)(0), // 17: ClimateFanMode + (ClimateSwingMode)(0), // 18: ClimateSwingMode + (ClimateAction)(0), // 19: ClimateAction + (ClimatePreset)(0), // 20: ClimatePreset + (WaterHeaterMode)(0), // 21: WaterHeaterMode + (WaterHeaterCommandHasField)(0), // 22: WaterHeaterCommandHasField + (NumberMode)(0), // 23: NumberMode + (LockState)(0), // 24: LockState + (LockCommand)(0), // 25: LockCommand + (MediaPlayerState)(0), // 26: MediaPlayerState + (MediaPlayerCommand)(0), // 27: MediaPlayerCommand + (MediaPlayerFormatPurpose)(0), // 28: MediaPlayerFormatPurpose + (BluetoothDeviceRequestType)(0), // 29: BluetoothDeviceRequestType + (BluetoothScannerState)(0), // 30: BluetoothScannerState + (BluetoothScannerMode)(0), // 31: BluetoothScannerMode + (VoiceAssistantSubscribeFlag)(0), // 32: VoiceAssistantSubscribeFlag + (VoiceAssistantRequestFlag)(0), // 33: VoiceAssistantRequestFlag + (VoiceAssistantEvent)(0), // 34: VoiceAssistantEvent + (VoiceAssistantTimerEvent)(0), // 35: VoiceAssistantTimerEvent + (AlarmControlPanelState)(0), // 36: AlarmControlPanelState + (AlarmControlPanelStateCommand)(0), // 37: AlarmControlPanelStateCommand + (TextMode)(0), // 38: TextMode + (ValveOperation)(0), // 39: ValveOperation + (UpdateCommand)(0), // 40: UpdateCommand + (ZWaveProxyRequestType)(0), // 41: ZWaveProxyRequestType + (SerialProxyParity)(0), // 42: SerialProxyParity + (SerialProxyRequestType)(0), // 43: SerialProxyRequestType + (SerialProxyStatus)(0), // 44: SerialProxyStatus + (*HelloRequest)(nil), // 45: HelloRequest + (*HelloResponse)(nil), // 46: HelloResponse + (*AuthenticationRequest)(nil), // 47: AuthenticationRequest + (*AuthenticationResponse)(nil), // 48: AuthenticationResponse + (*DisconnectRequest)(nil), // 49: DisconnectRequest + (*DisconnectResponse)(nil), // 50: DisconnectResponse + (*PingRequest)(nil), // 51: PingRequest + (*PingResponse)(nil), // 52: PingResponse + (*DeviceInfoRequest)(nil), // 53: DeviceInfoRequest + (*AreaInfo)(nil), // 54: AreaInfo + (*DeviceInfo)(nil), // 55: DeviceInfo + (*SerialProxyInfo)(nil), // 56: SerialProxyInfo + (*DeviceInfoResponse)(nil), // 57: DeviceInfoResponse + (*ListEntitiesRequest)(nil), // 58: ListEntitiesRequest + (*ListEntitiesDoneResponse)(nil), // 59: ListEntitiesDoneResponse + (*SubscribeStatesRequest)(nil), // 60: SubscribeStatesRequest + (*ListEntitiesBinarySensorResponse)(nil), // 61: ListEntitiesBinarySensorResponse + (*BinarySensorStateResponse)(nil), // 62: BinarySensorStateResponse + (*ListEntitiesCoverResponse)(nil), // 63: ListEntitiesCoverResponse + (*CoverStateResponse)(nil), // 64: CoverStateResponse + (*CoverCommandRequest)(nil), // 65: CoverCommandRequest + (*ListEntitiesFanResponse)(nil), // 66: ListEntitiesFanResponse + (*FanStateResponse)(nil), // 67: FanStateResponse + (*FanCommandRequest)(nil), // 68: FanCommandRequest + (*ListEntitiesLightResponse)(nil), // 69: ListEntitiesLightResponse + (*LightStateResponse)(nil), // 70: LightStateResponse + (*LightCommandRequest)(nil), // 71: LightCommandRequest + (*ListEntitiesSensorResponse)(nil), // 72: ListEntitiesSensorResponse + (*SensorStateResponse)(nil), // 73: SensorStateResponse + (*ListEntitiesSwitchResponse)(nil), // 74: ListEntitiesSwitchResponse + (*SwitchStateResponse)(nil), // 75: SwitchStateResponse + (*SwitchCommandRequest)(nil), // 76: SwitchCommandRequest + (*ListEntitiesTextSensorResponse)(nil), // 77: ListEntitiesTextSensorResponse + (*TextSensorStateResponse)(nil), // 78: TextSensorStateResponse + (*SubscribeLogsRequest)(nil), // 79: SubscribeLogsRequest + (*SubscribeLogsResponse)(nil), // 80: SubscribeLogsResponse + (*NoiseEncryptionSetKeyRequest)(nil), // 81: NoiseEncryptionSetKeyRequest + (*NoiseEncryptionSetKeyResponse)(nil), // 82: NoiseEncryptionSetKeyResponse + (*SubscribeHomeassistantServicesRequest)(nil), // 83: SubscribeHomeassistantServicesRequest + (*HomeassistantServiceMap)(nil), // 84: HomeassistantServiceMap + (*HomeassistantActionRequest)(nil), // 85: HomeassistantActionRequest + (*HomeassistantActionResponse)(nil), // 86: HomeassistantActionResponse + (*SubscribeHomeAssistantStatesRequest)(nil), // 87: SubscribeHomeAssistantStatesRequest + (*SubscribeHomeAssistantStateResponse)(nil), // 88: SubscribeHomeAssistantStateResponse + (*HomeAssistantStateResponse)(nil), // 89: HomeAssistantStateResponse + (*GetTimeRequest)(nil), // 90: GetTimeRequest + (*DSTRule)(nil), // 91: DSTRule + (*ParsedTimezone)(nil), // 92: ParsedTimezone + (*GetTimeResponse)(nil), // 93: GetTimeResponse + (*ListEntitiesServicesArgument)(nil), // 94: ListEntitiesServicesArgument + (*ListEntitiesServicesResponse)(nil), // 95: ListEntitiesServicesResponse + (*ExecuteServiceArgument)(nil), // 96: ExecuteServiceArgument + (*ExecuteServiceRequest)(nil), // 97: ExecuteServiceRequest + (*ExecuteServiceResponse)(nil), // 98: ExecuteServiceResponse + (*ListEntitiesCameraResponse)(nil), // 99: ListEntitiesCameraResponse + (*CameraImageResponse)(nil), // 100: CameraImageResponse + (*CameraImageRequest)(nil), // 101: CameraImageRequest + (*ListEntitiesClimateResponse)(nil), // 102: ListEntitiesClimateResponse + (*ClimateStateResponse)(nil), // 103: ClimateStateResponse + (*ClimateCommandRequest)(nil), // 104: ClimateCommandRequest + (*ListEntitiesWaterHeaterResponse)(nil), // 105: ListEntitiesWaterHeaterResponse + (*WaterHeaterStateResponse)(nil), // 106: WaterHeaterStateResponse + (*WaterHeaterCommandRequest)(nil), // 107: WaterHeaterCommandRequest + (*ListEntitiesNumberResponse)(nil), // 108: ListEntitiesNumberResponse + (*NumberStateResponse)(nil), // 109: NumberStateResponse + (*NumberCommandRequest)(nil), // 110: NumberCommandRequest + (*ListEntitiesSelectResponse)(nil), // 111: ListEntitiesSelectResponse + (*SelectStateResponse)(nil), // 112: SelectStateResponse + (*SelectCommandRequest)(nil), // 113: SelectCommandRequest + (*ListEntitiesSirenResponse)(nil), // 114: ListEntitiesSirenResponse + (*SirenStateResponse)(nil), // 115: SirenStateResponse + (*SirenCommandRequest)(nil), // 116: SirenCommandRequest + (*ListEntitiesLockResponse)(nil), // 117: ListEntitiesLockResponse + (*LockStateResponse)(nil), // 118: LockStateResponse + (*LockCommandRequest)(nil), // 119: LockCommandRequest + (*ListEntitiesButtonResponse)(nil), // 120: ListEntitiesButtonResponse + (*ButtonCommandRequest)(nil), // 121: ButtonCommandRequest + (*MediaPlayerSupportedFormat)(nil), // 122: MediaPlayerSupportedFormat + (*ListEntitiesMediaPlayerResponse)(nil), // 123: ListEntitiesMediaPlayerResponse + (*MediaPlayerStateResponse)(nil), // 124: MediaPlayerStateResponse + (*MediaPlayerCommandRequest)(nil), // 125: MediaPlayerCommandRequest + (*SubscribeBluetoothLEAdvertisementsRequest)(nil), // 126: SubscribeBluetoothLEAdvertisementsRequest + (*BluetoothServiceData)(nil), // 127: BluetoothServiceData + (*BluetoothLEAdvertisementResponse)(nil), // 128: BluetoothLEAdvertisementResponse + (*BluetoothLERawAdvertisement)(nil), // 129: BluetoothLERawAdvertisement + (*BluetoothLERawAdvertisementsResponse)(nil), // 130: BluetoothLERawAdvertisementsResponse + (*BluetoothDeviceRequest)(nil), // 131: BluetoothDeviceRequest + (*BluetoothDeviceConnectionResponse)(nil), // 132: BluetoothDeviceConnectionResponse + (*BluetoothGATTGetServicesRequest)(nil), // 133: BluetoothGATTGetServicesRequest + (*BluetoothGATTDescriptor)(nil), // 134: BluetoothGATTDescriptor + (*BluetoothGATTCharacteristic)(nil), // 135: BluetoothGATTCharacteristic + (*BluetoothGATTService)(nil), // 136: BluetoothGATTService + (*BluetoothGATTGetServicesResponse)(nil), // 137: BluetoothGATTGetServicesResponse + (*BluetoothGATTGetServicesDoneResponse)(nil), // 138: BluetoothGATTGetServicesDoneResponse + (*BluetoothGATTReadRequest)(nil), // 139: BluetoothGATTReadRequest + (*BluetoothGATTReadResponse)(nil), // 140: BluetoothGATTReadResponse + (*BluetoothGATTWriteRequest)(nil), // 141: BluetoothGATTWriteRequest + (*BluetoothGATTReadDescriptorRequest)(nil), // 142: BluetoothGATTReadDescriptorRequest + (*BluetoothGATTWriteDescriptorRequest)(nil), // 143: BluetoothGATTWriteDescriptorRequest + (*BluetoothGATTNotifyRequest)(nil), // 144: BluetoothGATTNotifyRequest + (*BluetoothGATTNotifyDataResponse)(nil), // 145: BluetoothGATTNotifyDataResponse + (*SubscribeBluetoothConnectionsFreeRequest)(nil), // 146: SubscribeBluetoothConnectionsFreeRequest + (*BluetoothConnectionsFreeResponse)(nil), // 147: BluetoothConnectionsFreeResponse + (*BluetoothGATTErrorResponse)(nil), // 148: BluetoothGATTErrorResponse + (*BluetoothGATTWriteResponse)(nil), // 149: BluetoothGATTWriteResponse + (*BluetoothGATTNotifyResponse)(nil), // 150: BluetoothGATTNotifyResponse + (*BluetoothDevicePairingResponse)(nil), // 151: BluetoothDevicePairingResponse + (*BluetoothDeviceUnpairingResponse)(nil), // 152: BluetoothDeviceUnpairingResponse + (*UnsubscribeBluetoothLEAdvertisementsRequest)(nil), // 153: UnsubscribeBluetoothLEAdvertisementsRequest + (*BluetoothDeviceClearCacheResponse)(nil), // 154: BluetoothDeviceClearCacheResponse + (*BluetoothScannerStateResponse)(nil), // 155: BluetoothScannerStateResponse + (*BluetoothScannerSetModeRequest)(nil), // 156: BluetoothScannerSetModeRequest + (*SubscribeVoiceAssistantRequest)(nil), // 157: SubscribeVoiceAssistantRequest + (*VoiceAssistantAudioSettings)(nil), // 158: VoiceAssistantAudioSettings + (*VoiceAssistantRequest)(nil), // 159: VoiceAssistantRequest + (*VoiceAssistantResponse)(nil), // 160: VoiceAssistantResponse + (*VoiceAssistantEventData)(nil), // 161: VoiceAssistantEventData + (*VoiceAssistantEventResponse)(nil), // 162: VoiceAssistantEventResponse + (*VoiceAssistantAudio)(nil), // 163: VoiceAssistantAudio + (*VoiceAssistantTimerEventResponse)(nil), // 164: VoiceAssistantTimerEventResponse + (*VoiceAssistantAnnounceRequest)(nil), // 165: VoiceAssistantAnnounceRequest + (*VoiceAssistantAnnounceFinished)(nil), // 166: VoiceAssistantAnnounceFinished + (*VoiceAssistantWakeWord)(nil), // 167: VoiceAssistantWakeWord + (*VoiceAssistantExternalWakeWord)(nil), // 168: VoiceAssistantExternalWakeWord + (*VoiceAssistantConfigurationRequest)(nil), // 169: VoiceAssistantConfigurationRequest + (*VoiceAssistantConfigurationResponse)(nil), // 170: VoiceAssistantConfigurationResponse + (*VoiceAssistantSetConfiguration)(nil), // 171: VoiceAssistantSetConfiguration + (*ListEntitiesAlarmControlPanelResponse)(nil), // 172: ListEntitiesAlarmControlPanelResponse + (*AlarmControlPanelStateResponse)(nil), // 173: AlarmControlPanelStateResponse + (*AlarmControlPanelCommandRequest)(nil), // 174: AlarmControlPanelCommandRequest + (*ListEntitiesTextResponse)(nil), // 175: ListEntitiesTextResponse + (*TextStateResponse)(nil), // 176: TextStateResponse + (*TextCommandRequest)(nil), // 177: TextCommandRequest + (*ListEntitiesDateResponse)(nil), // 178: ListEntitiesDateResponse + (*DateStateResponse)(nil), // 179: DateStateResponse + (*DateCommandRequest)(nil), // 180: DateCommandRequest + (*ListEntitiesTimeResponse)(nil), // 181: ListEntitiesTimeResponse + (*TimeStateResponse)(nil), // 182: TimeStateResponse + (*TimeCommandRequest)(nil), // 183: TimeCommandRequest + (*ListEntitiesEventResponse)(nil), // 184: ListEntitiesEventResponse + (*EventResponse)(nil), // 185: EventResponse + (*ListEntitiesValveResponse)(nil), // 186: ListEntitiesValveResponse + (*ValveStateResponse)(nil), // 187: ValveStateResponse + (*ValveCommandRequest)(nil), // 188: ValveCommandRequest + (*ListEntitiesDateTimeResponse)(nil), // 189: ListEntitiesDateTimeResponse + (*DateTimeStateResponse)(nil), // 190: DateTimeStateResponse + (*DateTimeCommandRequest)(nil), // 191: DateTimeCommandRequest + (*ListEntitiesUpdateResponse)(nil), // 192: ListEntitiesUpdateResponse + (*UpdateStateResponse)(nil), // 193: UpdateStateResponse + (*UpdateCommandRequest)(nil), // 194: UpdateCommandRequest + (*ZWaveProxyFrame)(nil), // 195: ZWaveProxyFrame + (*ZWaveProxyRequest)(nil), // 196: ZWaveProxyRequest + (*ListEntitiesInfraredResponse)(nil), // 197: ListEntitiesInfraredResponse + (*InfraredRFTransmitRawTimingsRequest)(nil), // 198: InfraredRFTransmitRawTimingsRequest + (*InfraredRFReceiveEvent)(nil), // 199: InfraredRFReceiveEvent + (*ListEntitiesRadioFrequencyResponse)(nil), // 200: ListEntitiesRadioFrequencyResponse + (*SerialProxyConfigureRequest)(nil), // 201: SerialProxyConfigureRequest + (*SerialProxyDataReceived)(nil), // 202: SerialProxyDataReceived + (*SerialProxyWriteRequest)(nil), // 203: SerialProxyWriteRequest + (*SerialProxySetModemPinsRequest)(nil), // 204: SerialProxySetModemPinsRequest + (*SerialProxyGetModemPinsRequest)(nil), // 205: SerialProxyGetModemPinsRequest + (*SerialProxyGetModemPinsResponse)(nil), // 206: SerialProxyGetModemPinsResponse + (*SerialProxyRequest)(nil), // 207: SerialProxyRequest + (*SerialProxyRequestResponse)(nil), // 208: SerialProxyRequestResponse + (*BluetoothSetConnectionParamsRequest)(nil), // 209: BluetoothSetConnectionParamsRequest + (*BluetoothSetConnectionParamsResponse)(nil), // 210: BluetoothSetConnectionParamsResponse + (*Void)(nil), // 211: void } var file_api_proto_depIdxs = []int32{ - 0, // 0: ListEntitiesBinarySensorResponse.entity_category:type_name -> EntityCategory - 0, // 1: ListEntitiesCoverResponse.entity_category:type_name -> EntityCategory - 1, // 2: CoverStateResponse.legacy_state:type_name -> LegacyCoverState - 2, // 3: CoverStateResponse.current_operation:type_name -> CoverOperation - 3, // 4: CoverCommandRequest.legacy_command:type_name -> LegacyCoverCommand - 0, // 5: ListEntitiesFanResponse.entity_category:type_name -> EntityCategory - 4, // 6: FanStateResponse.speed:type_name -> FanSpeed - 5, // 7: FanStateResponse.direction:type_name -> FanDirection - 4, // 8: FanCommandRequest.speed:type_name -> FanSpeed - 5, // 9: FanCommandRequest.direction:type_name -> FanDirection - 6, // 10: ListEntitiesLightResponse.supported_color_modes:type_name -> ColorMode - 0, // 11: ListEntitiesLightResponse.entity_category:type_name -> EntityCategory - 6, // 12: LightStateResponse.color_mode:type_name -> ColorMode - 6, // 13: LightCommandRequest.color_mode:type_name -> ColorMode - 7, // 14: ListEntitiesSensorResponse.state_class:type_name -> SensorStateClass - 8, // 15: ListEntitiesSensorResponse.legacy_last_reset_type:type_name -> SensorLastResetType - 0, // 16: ListEntitiesSensorResponse.entity_category:type_name -> EntityCategory - 0, // 17: ListEntitiesSwitchResponse.entity_category:type_name -> EntityCategory - 0, // 18: ListEntitiesTextSensorResponse.entity_category:type_name -> EntityCategory - 9, // 19: SubscribeLogsRequest.level:type_name -> LogLevel - 9, // 20: SubscribeLogsResponse.level:type_name -> LogLevel - 63, // 21: HomeassistantServiceResponse.data:type_name -> HomeassistantServiceMap - 63, // 22: HomeassistantServiceResponse.data_template:type_name -> HomeassistantServiceMap - 63, // 23: HomeassistantServiceResponse.variables:type_name -> HomeassistantServiceMap - 10, // 24: ListEntitiesServicesArgument.type:type_name -> ServiceArgType - 70, // 25: ListEntitiesServicesResponse.args:type_name -> ListEntitiesServicesArgument - 72, // 26: ExecuteServiceRequest.args:type_name -> ExecuteServiceArgument - 0, // 27: ListEntitiesCameraResponse.entity_category:type_name -> EntityCategory - 11, // 28: ListEntitiesClimateResponse.supported_modes:type_name -> ClimateMode - 12, // 29: ListEntitiesClimateResponse.supported_fan_modes:type_name -> ClimateFanMode - 13, // 30: ListEntitiesClimateResponse.supported_swing_modes:type_name -> ClimateSwingMode - 15, // 31: ListEntitiesClimateResponse.supported_presets:type_name -> ClimatePreset - 0, // 32: ListEntitiesClimateResponse.entity_category:type_name -> EntityCategory - 11, // 33: ClimateStateResponse.mode:type_name -> ClimateMode - 14, // 34: ClimateStateResponse.action:type_name -> ClimateAction - 12, // 35: ClimateStateResponse.fan_mode:type_name -> ClimateFanMode - 13, // 36: ClimateStateResponse.swing_mode:type_name -> ClimateSwingMode - 15, // 37: ClimateStateResponse.preset:type_name -> ClimatePreset - 11, // 38: ClimateCommandRequest.mode:type_name -> ClimateMode - 12, // 39: ClimateCommandRequest.fan_mode:type_name -> ClimateFanMode - 13, // 40: ClimateCommandRequest.swing_mode:type_name -> ClimateSwingMode - 15, // 41: ClimateCommandRequest.preset:type_name -> ClimatePreset - 0, // 42: ListEntitiesNumberResponse.entity_category:type_name -> EntityCategory - 16, // 43: ListEntitiesNumberResponse.mode:type_name -> NumberMode - 0, // 44: ListEntitiesSelectResponse.entity_category:type_name -> EntityCategory - 0, // 45: ListEntitiesLockResponse.entity_category:type_name -> EntityCategory - 17, // 46: LockStateResponse.state:type_name -> LockState - 18, // 47: LockCommandRequest.command:type_name -> LockCommand - 0, // 48: ListEntitiesButtonResponse.entity_category:type_name -> EntityCategory - 0, // 49: ListEntitiesMediaPlayerResponse.entity_category:type_name -> EntityCategory - 19, // 50: MediaPlayerStateResponse.state:type_name -> MediaPlayerState - 20, // 51: MediaPlayerCommandRequest.command:type_name -> MediaPlayerCommand - 95, // 52: BluetoothLEAdvertisementResponse.service_data:type_name -> BluetoothServiceData - 95, // 53: BluetoothLEAdvertisementResponse.manufacturer_data:type_name -> BluetoothServiceData - 97, // 54: BluetoothLERawAdvertisementsResponse.advertisements:type_name -> BluetoothLERawAdvertisement - 21, // 55: BluetoothDeviceRequest.request_type:type_name -> BluetoothDeviceRequestType - 102, // 56: BluetoothGATTCharacteristic.descriptors:type_name -> BluetoothGATTDescriptor - 103, // 57: BluetoothGATTService.characteristics:type_name -> BluetoothGATTCharacteristic - 104, // 58: BluetoothGATTGetServicesResponse.services:type_name -> BluetoothGATTService - 124, // 59: VoiceAssistantRequest.audio_settings:type_name -> VoiceAssistantAudioSettings - 24, // 60: VoiceAssistantEventResponse.event_type:type_name -> VoiceAssistantEvent - 127, // 61: VoiceAssistantEventResponse.data:type_name -> VoiceAssistantEventData - 0, // 62: ListEntitiesAlarmControlPanelResponse.entity_category:type_name -> EntityCategory - 25, // 63: AlarmControlPanelStateResponse.state:type_name -> AlarmControlPanelState - 26, // 64: AlarmControlPanelCommandRequest.command:type_name -> AlarmControlPanelStateCommand - 0, // 65: ListEntitiesTextResponse.entity_category:type_name -> EntityCategory - 27, // 66: ListEntitiesTextResponse.mode:type_name -> TextMode - 0, // 67: ListEntitiesDateResponse.entity_category:type_name -> EntityCategory - 0, // 68: ListEntitiesTimeResponse.entity_category:type_name -> EntityCategory - 0, // 69: ListEntitiesEventResponse.entity_category:type_name -> EntityCategory - 0, // 70: ListEntitiesValveResponse.entity_category:type_name -> EntityCategory - 28, // 71: ValveStateResponse.current_operation:type_name -> ValveOperation - 0, // 72: ListEntitiesDateTimeResponse.entity_category:type_name -> EntityCategory - 29, // 73: APIConnection.hello:input_type -> HelloRequest - 31, // 74: APIConnection.connect:input_type -> ConnectRequest - 33, // 75: APIConnection.disconnect:input_type -> DisconnectRequest - 35, // 76: APIConnection.ping:input_type -> PingRequest - 37, // 77: APIConnection.device_info:input_type -> DeviceInfoRequest - 39, // 78: APIConnection.list_entities:input_type -> ListEntitiesRequest - 41, // 79: APIConnection.subscribe_states:input_type -> SubscribeStatesRequest - 60, // 80: APIConnection.subscribe_logs:input_type -> SubscribeLogsRequest - 62, // 81: APIConnection.subscribe_homeassistant_services:input_type -> SubscribeHomeassistantServicesRequest - 65, // 82: APIConnection.subscribe_home_assistant_states:input_type -> SubscribeHomeAssistantStatesRequest - 68, // 83: APIConnection.get_time:input_type -> GetTimeRequest - 73, // 84: APIConnection.execute_service:input_type -> ExecuteServiceRequest - 46, // 85: APIConnection.cover_command:input_type -> CoverCommandRequest - 49, // 86: APIConnection.fan_command:input_type -> FanCommandRequest - 52, // 87: APIConnection.light_command:input_type -> LightCommandRequest - 57, // 88: APIConnection.switch_command:input_type -> SwitchCommandRequest - 76, // 89: APIConnection.camera_image:input_type -> CameraImageRequest - 79, // 90: APIConnection.climate_command:input_type -> ClimateCommandRequest - 82, // 91: APIConnection.number_command:input_type -> NumberCommandRequest - 135, // 92: APIConnection.text_command:input_type -> TextCommandRequest - 85, // 93: APIConnection.select_command:input_type -> SelectCommandRequest - 90, // 94: APIConnection.button_command:input_type -> ButtonCommandRequest - 88, // 95: APIConnection.lock_command:input_type -> LockCommandRequest - 146, // 96: APIConnection.valve_command:input_type -> ValveCommandRequest - 93, // 97: APIConnection.media_player_command:input_type -> MediaPlayerCommandRequest - 138, // 98: APIConnection.date_command:input_type -> DateCommandRequest - 141, // 99: APIConnection.time_command:input_type -> TimeCommandRequest - 149, // 100: APIConnection.datetime_command:input_type -> DateTimeCommandRequest - 94, // 101: APIConnection.subscribe_bluetooth_le_advertisements:input_type -> SubscribeBluetoothLEAdvertisementsRequest - 99, // 102: APIConnection.bluetooth_device_request:input_type -> BluetoothDeviceRequest - 101, // 103: APIConnection.bluetooth_gatt_get_services:input_type -> BluetoothGATTGetServicesRequest - 107, // 104: APIConnection.bluetooth_gatt_read:input_type -> BluetoothGATTReadRequest - 109, // 105: APIConnection.bluetooth_gatt_write:input_type -> BluetoothGATTWriteRequest - 110, // 106: APIConnection.bluetooth_gatt_read_descriptor:input_type -> BluetoothGATTReadDescriptorRequest - 111, // 107: APIConnection.bluetooth_gatt_write_descriptor:input_type -> BluetoothGATTWriteDescriptorRequest - 112, // 108: APIConnection.bluetooth_gatt_notify:input_type -> BluetoothGATTNotifyRequest - 114, // 109: APIConnection.subscribe_bluetooth_connections_free:input_type -> SubscribeBluetoothConnectionsFreeRequest - 121, // 110: APIConnection.unsubscribe_bluetooth_le_advertisements:input_type -> UnsubscribeBluetoothLEAdvertisementsRequest - 123, // 111: APIConnection.subscribe_voice_assistant:input_type -> SubscribeVoiceAssistantRequest - 132, // 112: APIConnection.alarm_control_panel_command:input_type -> AlarmControlPanelCommandRequest - 30, // 113: APIConnection.hello:output_type -> HelloResponse - 32, // 114: APIConnection.connect:output_type -> ConnectResponse - 34, // 115: APIConnection.disconnect:output_type -> DisconnectResponse - 36, // 116: APIConnection.ping:output_type -> PingResponse - 38, // 117: APIConnection.device_info:output_type -> DeviceInfoResponse - 150, // 118: APIConnection.list_entities:output_type -> void - 150, // 119: APIConnection.subscribe_states:output_type -> void - 150, // 120: APIConnection.subscribe_logs:output_type -> void - 150, // 121: APIConnection.subscribe_homeassistant_services:output_type -> void - 150, // 122: APIConnection.subscribe_home_assistant_states:output_type -> void - 69, // 123: APIConnection.get_time:output_type -> GetTimeResponse - 150, // 124: APIConnection.execute_service:output_type -> void - 150, // 125: APIConnection.cover_command:output_type -> void - 150, // 126: APIConnection.fan_command:output_type -> void - 150, // 127: APIConnection.light_command:output_type -> void - 150, // 128: APIConnection.switch_command:output_type -> void - 150, // 129: APIConnection.camera_image:output_type -> void - 150, // 130: APIConnection.climate_command:output_type -> void - 150, // 131: APIConnection.number_command:output_type -> void - 150, // 132: APIConnection.text_command:output_type -> void - 150, // 133: APIConnection.select_command:output_type -> void - 150, // 134: APIConnection.button_command:output_type -> void - 150, // 135: APIConnection.lock_command:output_type -> void - 150, // 136: APIConnection.valve_command:output_type -> void - 150, // 137: APIConnection.media_player_command:output_type -> void - 150, // 138: APIConnection.date_command:output_type -> void - 150, // 139: APIConnection.time_command:output_type -> void - 150, // 140: APIConnection.datetime_command:output_type -> void - 150, // 141: APIConnection.subscribe_bluetooth_le_advertisements:output_type -> void - 150, // 142: APIConnection.bluetooth_device_request:output_type -> void - 150, // 143: APIConnection.bluetooth_gatt_get_services:output_type -> void - 150, // 144: APIConnection.bluetooth_gatt_read:output_type -> void - 150, // 145: APIConnection.bluetooth_gatt_write:output_type -> void - 150, // 146: APIConnection.bluetooth_gatt_read_descriptor:output_type -> void - 150, // 147: APIConnection.bluetooth_gatt_write_descriptor:output_type -> void - 150, // 148: APIConnection.bluetooth_gatt_notify:output_type -> void - 115, // 149: APIConnection.subscribe_bluetooth_connections_free:output_type -> BluetoothConnectionsFreeResponse - 150, // 150: APIConnection.unsubscribe_bluetooth_le_advertisements:output_type -> void - 150, // 151: APIConnection.subscribe_voice_assistant:output_type -> void - 150, // 152: APIConnection.alarm_control_panel_command:output_type -> void - 113, // [113:153] is the sub-list for method output_type - 73, // [73:113] is the sub-list for method input_type - 73, // [73:73] is the sub-list for extension type_name - 73, // [73:73] is the sub-list for extension extendee - 0, // [0:73] is the sub-list for field type_name + 0, // 0: DisconnectRequest.reason:type_name -> DisconnectReason + 1, // 1: SerialProxyInfo.port_type:type_name -> SerialProxyPortType + 55, // 2: DeviceInfoResponse.devices:type_name -> DeviceInfo + 54, // 3: DeviceInfoResponse.areas:type_name -> AreaInfo + 54, // 4: DeviceInfoResponse.area:type_name -> AreaInfo + 56, // 5: DeviceInfoResponse.serial_proxies:type_name -> SerialProxyInfo + 2, // 6: ListEntitiesBinarySensorResponse.entity_category:type_name -> EntityCategory + 2, // 7: ListEntitiesCoverResponse.entity_category:type_name -> EntityCategory + 3, // 8: CoverStateResponse.legacy_state:type_name -> LegacyCoverState + 4, // 9: CoverStateResponse.current_operation:type_name -> CoverOperation + 5, // 10: CoverCommandRequest.legacy_command:type_name -> LegacyCoverCommand + 2, // 11: ListEntitiesFanResponse.entity_category:type_name -> EntityCategory + 6, // 12: FanStateResponse.speed:type_name -> FanSpeed + 7, // 13: FanStateResponse.direction:type_name -> FanDirection + 6, // 14: FanCommandRequest.speed:type_name -> FanSpeed + 7, // 15: FanCommandRequest.direction:type_name -> FanDirection + 8, // 16: ListEntitiesLightResponse.supported_color_modes:type_name -> ColorMode + 2, // 17: ListEntitiesLightResponse.entity_category:type_name -> EntityCategory + 8, // 18: LightStateResponse.color_mode:type_name -> ColorMode + 8, // 19: LightCommandRequest.color_mode:type_name -> ColorMode + 9, // 20: ListEntitiesSensorResponse.state_class:type_name -> SensorStateClass + 10, // 21: ListEntitiesSensorResponse.legacy_last_reset_type:type_name -> SensorLastResetType + 2, // 22: ListEntitiesSensorResponse.entity_category:type_name -> EntityCategory + 2, // 23: ListEntitiesSwitchResponse.entity_category:type_name -> EntityCategory + 2, // 24: ListEntitiesTextSensorResponse.entity_category:type_name -> EntityCategory + 11, // 25: SubscribeLogsRequest.level:type_name -> LogLevel + 11, // 26: SubscribeLogsResponse.level:type_name -> LogLevel + 84, // 27: HomeassistantActionRequest.data:type_name -> HomeassistantServiceMap + 84, // 28: HomeassistantActionRequest.data_template:type_name -> HomeassistantServiceMap + 84, // 29: HomeassistantActionRequest.variables:type_name -> HomeassistantServiceMap + 12, // 30: DSTRule.type:type_name -> DSTRuleType + 91, // 31: ParsedTimezone.dst_start:type_name -> DSTRule + 91, // 32: ParsedTimezone.dst_end:type_name -> DSTRule + 92, // 33: GetTimeResponse.parsed_timezone:type_name -> ParsedTimezone + 13, // 34: ListEntitiesServicesArgument.type:type_name -> ServiceArgType + 94, // 35: ListEntitiesServicesResponse.args:type_name -> ListEntitiesServicesArgument + 14, // 36: ListEntitiesServicesResponse.supports_response:type_name -> SupportsResponseType + 96, // 37: ExecuteServiceRequest.args:type_name -> ExecuteServiceArgument + 2, // 38: ListEntitiesCameraResponse.entity_category:type_name -> EntityCategory + 16, // 39: ListEntitiesClimateResponse.supported_modes:type_name -> ClimateMode + 17, // 40: ListEntitiesClimateResponse.supported_fan_modes:type_name -> ClimateFanMode + 18, // 41: ListEntitiesClimateResponse.supported_swing_modes:type_name -> ClimateSwingMode + 20, // 42: ListEntitiesClimateResponse.supported_presets:type_name -> ClimatePreset + 2, // 43: ListEntitiesClimateResponse.entity_category:type_name -> EntityCategory + 15, // 44: ListEntitiesClimateResponse.temperature_unit:type_name -> TemperatureUnit + 16, // 45: ClimateStateResponse.mode:type_name -> ClimateMode + 19, // 46: ClimateStateResponse.action:type_name -> ClimateAction + 17, // 47: ClimateStateResponse.fan_mode:type_name -> ClimateFanMode + 18, // 48: ClimateStateResponse.swing_mode:type_name -> ClimateSwingMode + 20, // 49: ClimateStateResponse.preset:type_name -> ClimatePreset + 16, // 50: ClimateCommandRequest.mode:type_name -> ClimateMode + 17, // 51: ClimateCommandRequest.fan_mode:type_name -> ClimateFanMode + 18, // 52: ClimateCommandRequest.swing_mode:type_name -> ClimateSwingMode + 20, // 53: ClimateCommandRequest.preset:type_name -> ClimatePreset + 2, // 54: ListEntitiesWaterHeaterResponse.entity_category:type_name -> EntityCategory + 21, // 55: ListEntitiesWaterHeaterResponse.supported_modes:type_name -> WaterHeaterMode + 15, // 56: ListEntitiesWaterHeaterResponse.temperature_unit:type_name -> TemperatureUnit + 21, // 57: WaterHeaterStateResponse.mode:type_name -> WaterHeaterMode + 21, // 58: WaterHeaterCommandRequest.mode:type_name -> WaterHeaterMode + 2, // 59: ListEntitiesNumberResponse.entity_category:type_name -> EntityCategory + 23, // 60: ListEntitiesNumberResponse.mode:type_name -> NumberMode + 2, // 61: ListEntitiesSelectResponse.entity_category:type_name -> EntityCategory + 2, // 62: ListEntitiesSirenResponse.entity_category:type_name -> EntityCategory + 2, // 63: ListEntitiesLockResponse.entity_category:type_name -> EntityCategory + 24, // 64: LockStateResponse.state:type_name -> LockState + 25, // 65: LockCommandRequest.command:type_name -> LockCommand + 2, // 66: ListEntitiesButtonResponse.entity_category:type_name -> EntityCategory + 28, // 67: MediaPlayerSupportedFormat.purpose:type_name -> MediaPlayerFormatPurpose + 2, // 68: ListEntitiesMediaPlayerResponse.entity_category:type_name -> EntityCategory + 122, // 69: ListEntitiesMediaPlayerResponse.supported_formats:type_name -> MediaPlayerSupportedFormat + 26, // 70: MediaPlayerStateResponse.state:type_name -> MediaPlayerState + 27, // 71: MediaPlayerCommandRequest.command:type_name -> MediaPlayerCommand + 127, // 72: BluetoothLEAdvertisementResponse.service_data:type_name -> BluetoothServiceData + 127, // 73: BluetoothLEAdvertisementResponse.manufacturer_data:type_name -> BluetoothServiceData + 129, // 74: BluetoothLERawAdvertisementsResponse.advertisements:type_name -> BluetoothLERawAdvertisement + 29, // 75: BluetoothDeviceRequest.request_type:type_name -> BluetoothDeviceRequestType + 134, // 76: BluetoothGATTCharacteristic.descriptors:type_name -> BluetoothGATTDescriptor + 135, // 77: BluetoothGATTService.characteristics:type_name -> BluetoothGATTCharacteristic + 136, // 78: BluetoothGATTGetServicesResponse.services:type_name -> BluetoothGATTService + 30, // 79: BluetoothScannerStateResponse.state:type_name -> BluetoothScannerState + 31, // 80: BluetoothScannerStateResponse.mode:type_name -> BluetoothScannerMode + 31, // 81: BluetoothScannerStateResponse.configured_mode:type_name -> BluetoothScannerMode + 31, // 82: BluetoothScannerSetModeRequest.mode:type_name -> BluetoothScannerMode + 158, // 83: VoiceAssistantRequest.audio_settings:type_name -> VoiceAssistantAudioSettings + 34, // 84: VoiceAssistantEventResponse.event_type:type_name -> VoiceAssistantEvent + 161, // 85: VoiceAssistantEventResponse.data:type_name -> VoiceAssistantEventData + 35, // 86: VoiceAssistantTimerEventResponse.event_type:type_name -> VoiceAssistantTimerEvent + 168, // 87: VoiceAssistantConfigurationRequest.external_wake_words:type_name -> VoiceAssistantExternalWakeWord + 167, // 88: VoiceAssistantConfigurationResponse.available_wake_words:type_name -> VoiceAssistantWakeWord + 2, // 89: ListEntitiesAlarmControlPanelResponse.entity_category:type_name -> EntityCategory + 36, // 90: AlarmControlPanelStateResponse.state:type_name -> AlarmControlPanelState + 37, // 91: AlarmControlPanelCommandRequest.command:type_name -> AlarmControlPanelStateCommand + 2, // 92: ListEntitiesTextResponse.entity_category:type_name -> EntityCategory + 38, // 93: ListEntitiesTextResponse.mode:type_name -> TextMode + 2, // 94: ListEntitiesDateResponse.entity_category:type_name -> EntityCategory + 2, // 95: ListEntitiesTimeResponse.entity_category:type_name -> EntityCategory + 2, // 96: ListEntitiesEventResponse.entity_category:type_name -> EntityCategory + 2, // 97: ListEntitiesValveResponse.entity_category:type_name -> EntityCategory + 39, // 98: ValveStateResponse.current_operation:type_name -> ValveOperation + 2, // 99: ListEntitiesDateTimeResponse.entity_category:type_name -> EntityCategory + 2, // 100: ListEntitiesUpdateResponse.entity_category:type_name -> EntityCategory + 40, // 101: UpdateCommandRequest.command:type_name -> UpdateCommand + 41, // 102: ZWaveProxyRequest.type:type_name -> ZWaveProxyRequestType + 2, // 103: ListEntitiesInfraredResponse.entity_category:type_name -> EntityCategory + 2, // 104: ListEntitiesRadioFrequencyResponse.entity_category:type_name -> EntityCategory + 42, // 105: SerialProxyConfigureRequest.parity:type_name -> SerialProxyParity + 43, // 106: SerialProxyRequest.type:type_name -> SerialProxyRequestType + 43, // 107: SerialProxyRequestResponse.type:type_name -> SerialProxyRequestType + 44, // 108: SerialProxyRequestResponse.status:type_name -> SerialProxyStatus + 45, // 109: APIConnection.hello:input_type -> HelloRequest + 49, // 110: APIConnection.disconnect:input_type -> DisconnectRequest + 51, // 111: APIConnection.ping:input_type -> PingRequest + 53, // 112: APIConnection.device_info:input_type -> DeviceInfoRequest + 58, // 113: APIConnection.list_entities:input_type -> ListEntitiesRequest + 60, // 114: APIConnection.subscribe_states:input_type -> SubscribeStatesRequest + 79, // 115: APIConnection.subscribe_logs:input_type -> SubscribeLogsRequest + 83, // 116: APIConnection.subscribe_homeassistant_services:input_type -> SubscribeHomeassistantServicesRequest + 87, // 117: APIConnection.subscribe_home_assistant_states:input_type -> SubscribeHomeAssistantStatesRequest + 97, // 118: APIConnection.execute_service:input_type -> ExecuteServiceRequest + 81, // 119: APIConnection.noise_encryption_set_key:input_type -> NoiseEncryptionSetKeyRequest + 121, // 120: APIConnection.button_command:input_type -> ButtonCommandRequest + 101, // 121: APIConnection.camera_image:input_type -> CameraImageRequest + 104, // 122: APIConnection.climate_command:input_type -> ClimateCommandRequest + 65, // 123: APIConnection.cover_command:input_type -> CoverCommandRequest + 180, // 124: APIConnection.date_command:input_type -> DateCommandRequest + 191, // 125: APIConnection.datetime_command:input_type -> DateTimeCommandRequest + 68, // 126: APIConnection.fan_command:input_type -> FanCommandRequest + 71, // 127: APIConnection.light_command:input_type -> LightCommandRequest + 119, // 128: APIConnection.lock_command:input_type -> LockCommandRequest + 125, // 129: APIConnection.media_player_command:input_type -> MediaPlayerCommandRequest + 110, // 130: APIConnection.number_command:input_type -> NumberCommandRequest + 113, // 131: APIConnection.select_command:input_type -> SelectCommandRequest + 116, // 132: APIConnection.siren_command:input_type -> SirenCommandRequest + 76, // 133: APIConnection.switch_command:input_type -> SwitchCommandRequest + 177, // 134: APIConnection.text_command:input_type -> TextCommandRequest + 183, // 135: APIConnection.time_command:input_type -> TimeCommandRequest + 194, // 136: APIConnection.update_command:input_type -> UpdateCommandRequest + 188, // 137: APIConnection.valve_command:input_type -> ValveCommandRequest + 107, // 138: APIConnection.water_heater_command:input_type -> WaterHeaterCommandRequest + 126, // 139: APIConnection.subscribe_bluetooth_le_advertisements:input_type -> SubscribeBluetoothLEAdvertisementsRequest + 131, // 140: APIConnection.bluetooth_device_request:input_type -> BluetoothDeviceRequest + 133, // 141: APIConnection.bluetooth_gatt_get_services:input_type -> BluetoothGATTGetServicesRequest + 139, // 142: APIConnection.bluetooth_gatt_read:input_type -> BluetoothGATTReadRequest + 141, // 143: APIConnection.bluetooth_gatt_write:input_type -> BluetoothGATTWriteRequest + 142, // 144: APIConnection.bluetooth_gatt_read_descriptor:input_type -> BluetoothGATTReadDescriptorRequest + 143, // 145: APIConnection.bluetooth_gatt_write_descriptor:input_type -> BluetoothGATTWriteDescriptorRequest + 144, // 146: APIConnection.bluetooth_gatt_notify:input_type -> BluetoothGATTNotifyRequest + 146, // 147: APIConnection.subscribe_bluetooth_connections_free:input_type -> SubscribeBluetoothConnectionsFreeRequest + 153, // 148: APIConnection.unsubscribe_bluetooth_le_advertisements:input_type -> UnsubscribeBluetoothLEAdvertisementsRequest + 156, // 149: APIConnection.bluetooth_scanner_set_mode:input_type -> BluetoothScannerSetModeRequest + 209, // 150: APIConnection.bluetooth_set_connection_params:input_type -> BluetoothSetConnectionParamsRequest + 157, // 151: APIConnection.subscribe_voice_assistant:input_type -> SubscribeVoiceAssistantRequest + 169, // 152: APIConnection.voice_assistant_get_configuration:input_type -> VoiceAssistantConfigurationRequest + 171, // 153: APIConnection.voice_assistant_set_configuration:input_type -> VoiceAssistantSetConfiguration + 174, // 154: APIConnection.alarm_control_panel_command:input_type -> AlarmControlPanelCommandRequest + 195, // 155: APIConnection.zwave_proxy_frame:input_type -> ZWaveProxyFrame + 196, // 156: APIConnection.zwave_proxy_request:input_type -> ZWaveProxyRequest + 198, // 157: APIConnection.infrared_rf_transmit_raw_timings:input_type -> InfraredRFTransmitRawTimingsRequest + 201, // 158: APIConnection.serial_proxy_configure:input_type -> SerialProxyConfigureRequest + 203, // 159: APIConnection.serial_proxy_write:input_type -> SerialProxyWriteRequest + 204, // 160: APIConnection.serial_proxy_set_modem_pins:input_type -> SerialProxySetModemPinsRequest + 205, // 161: APIConnection.serial_proxy_get_modem_pins:input_type -> SerialProxyGetModemPinsRequest + 207, // 162: APIConnection.serial_proxy_request:input_type -> SerialProxyRequest + 46, // 163: APIConnection.hello:output_type -> HelloResponse + 50, // 164: APIConnection.disconnect:output_type -> DisconnectResponse + 52, // 165: APIConnection.ping:output_type -> PingResponse + 57, // 166: APIConnection.device_info:output_type -> DeviceInfoResponse + 211, // 167: APIConnection.list_entities:output_type -> void + 211, // 168: APIConnection.subscribe_states:output_type -> void + 211, // 169: APIConnection.subscribe_logs:output_type -> void + 211, // 170: APIConnection.subscribe_homeassistant_services:output_type -> void + 211, // 171: APIConnection.subscribe_home_assistant_states:output_type -> void + 211, // 172: APIConnection.execute_service:output_type -> void + 82, // 173: APIConnection.noise_encryption_set_key:output_type -> NoiseEncryptionSetKeyResponse + 211, // 174: APIConnection.button_command:output_type -> void + 211, // 175: APIConnection.camera_image:output_type -> void + 211, // 176: APIConnection.climate_command:output_type -> void + 211, // 177: APIConnection.cover_command:output_type -> void + 211, // 178: APIConnection.date_command:output_type -> void + 211, // 179: APIConnection.datetime_command:output_type -> void + 211, // 180: APIConnection.fan_command:output_type -> void + 211, // 181: APIConnection.light_command:output_type -> void + 211, // 182: APIConnection.lock_command:output_type -> void + 211, // 183: APIConnection.media_player_command:output_type -> void + 211, // 184: APIConnection.number_command:output_type -> void + 211, // 185: APIConnection.select_command:output_type -> void + 211, // 186: APIConnection.siren_command:output_type -> void + 211, // 187: APIConnection.switch_command:output_type -> void + 211, // 188: APIConnection.text_command:output_type -> void + 211, // 189: APIConnection.time_command:output_type -> void + 211, // 190: APIConnection.update_command:output_type -> void + 211, // 191: APIConnection.valve_command:output_type -> void + 211, // 192: APIConnection.water_heater_command:output_type -> void + 211, // 193: APIConnection.subscribe_bluetooth_le_advertisements:output_type -> void + 211, // 194: APIConnection.bluetooth_device_request:output_type -> void + 211, // 195: APIConnection.bluetooth_gatt_get_services:output_type -> void + 211, // 196: APIConnection.bluetooth_gatt_read:output_type -> void + 211, // 197: APIConnection.bluetooth_gatt_write:output_type -> void + 211, // 198: APIConnection.bluetooth_gatt_read_descriptor:output_type -> void + 211, // 199: APIConnection.bluetooth_gatt_write_descriptor:output_type -> void + 211, // 200: APIConnection.bluetooth_gatt_notify:output_type -> void + 147, // 201: APIConnection.subscribe_bluetooth_connections_free:output_type -> BluetoothConnectionsFreeResponse + 211, // 202: APIConnection.unsubscribe_bluetooth_le_advertisements:output_type -> void + 211, // 203: APIConnection.bluetooth_scanner_set_mode:output_type -> void + 210, // 204: APIConnection.bluetooth_set_connection_params:output_type -> BluetoothSetConnectionParamsResponse + 211, // 205: APIConnection.subscribe_voice_assistant:output_type -> void + 170, // 206: APIConnection.voice_assistant_get_configuration:output_type -> VoiceAssistantConfigurationResponse + 211, // 207: APIConnection.voice_assistant_set_configuration:output_type -> void + 211, // 208: APIConnection.alarm_control_panel_command:output_type -> void + 211, // 209: APIConnection.zwave_proxy_frame:output_type -> void + 211, // 210: APIConnection.zwave_proxy_request:output_type -> void + 211, // 211: APIConnection.infrared_rf_transmit_raw_timings:output_type -> void + 211, // 212: APIConnection.serial_proxy_configure:output_type -> void + 211, // 213: APIConnection.serial_proxy_write:output_type -> void + 211, // 214: APIConnection.serial_proxy_set_modem_pins:output_type -> void + 211, // 215: APIConnection.serial_proxy_get_modem_pins:output_type -> void + 211, // 216: APIConnection.serial_proxy_request:output_type -> void + 163, // [163:217] is the sub-list for method output_type + 109, // [109:163] is the sub-list for method input_type + 109, // [109:109] is the sub-list for extension type_name + 109, // [109:109] is the sub-list for extension extendee + 0, // [0:109] is the sub-list for field type_name } func init() { file_api_proto_init() } @@ -13430,1467 +17334,13 @@ func file_api_proto_init() { return } file_api_options_proto_init() - if !protoimpl.UnsafeEnabled { - file_api_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HelloRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HelloResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConnectRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConnectResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DisconnectRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DisconnectResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PingRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PingResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeviceInfoRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeviceInfoResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesDoneResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeStatesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesBinarySensorResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BinarySensorStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesCoverResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CoverStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CoverCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesFanResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FanStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FanCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesLightResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LightStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LightCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesSensorResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SensorStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesSwitchResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SwitchStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SwitchCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesTextSensorResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TextSensorStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeLogsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeLogsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeHomeassistantServicesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HomeassistantServiceMap); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HomeassistantServiceResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeHomeAssistantStatesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeHomeAssistantStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HomeAssistantStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTimeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTimeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesServicesArgument); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesServicesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecuteServiceArgument); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecuteServiceRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesCameraResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CameraImageResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CameraImageRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesClimateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClimateStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClimateCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesNumberResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NumberStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NumberCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesSelectResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SelectStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SelectCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesLockResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LockStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LockCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesButtonResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ButtonCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesMediaPlayerResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MediaPlayerStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MediaPlayerCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeBluetoothLEAdvertisementsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothServiceData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothLEAdvertisementResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothLERawAdvertisement); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothLERawAdvertisementsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothDeviceRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothDeviceConnectionResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTGetServicesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTDescriptor); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTCharacteristic); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTService); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTGetServicesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTGetServicesDoneResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTReadRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTReadResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTWriteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTReadDescriptorRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTWriteDescriptorRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTNotifyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTNotifyDataResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeBluetoothConnectionsFreeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothConnectionsFreeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTErrorResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTWriteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothGATTNotifyResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothDevicePairingResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothDeviceUnpairingResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnsubscribeBluetoothLEAdvertisementsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BluetoothDeviceClearCacheResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeVoiceAssistantRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VoiceAssistantAudioSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VoiceAssistantRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VoiceAssistantResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VoiceAssistantEventData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VoiceAssistantEventResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VoiceAssistantAudio); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesAlarmControlPanelResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AlarmControlPanelStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AlarmControlPanelCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesTextResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TextStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TextCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesDateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DateStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DateCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesTimeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TimeStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TimeCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesEventResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EventResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesValveResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValveStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValveCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEntitiesDateTimeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DateTimeStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DateTimeCommandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_api_proto_rawDesc, - NumEnums: 29, - NumMessages: 121, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_proto_rawDesc), len(file_api_proto_rawDesc)), + NumEnums: 45, + NumMessages: 166, NumExtensions: 0, NumServices: 1, }, @@ -14900,7 +17350,6 @@ func file_api_proto_init() { MessageInfos: file_api_proto_msgTypes, }.Build() File_api_proto = out.File - file_api_proto_rawDesc = nil file_api_proto_goTypes = nil file_api_proto_depIdxs = nil } diff --git a/pkg/api/api_options.pb.go b/pkg/api/api_options.pb.go index 90dd528..bb1bc68 100644 --- a/pkg/api/api_options.pb.go +++ b/pkg/api/api_options.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 -// protoc v3.21.12 +// protoc-gen-go v1.36.11 +// protoc v5.27.2 // source: api_options.proto package api @@ -12,6 +12,7 @@ import ( descriptorpb "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -81,18 +82,16 @@ func (APISourceType) EnumDescriptor() ([]byte, []int) { } type Void struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Void) Reset() { *x = Void{} - if protoimpl.UnsafeEnabled { - mi := &file_api_options_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_options_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Void) String() string { @@ -103,7 +102,7 @@ func (*Void) ProtoMessage() {} func (x *Void) ProtoReflect() protoreflect.Message { mi := &file_api_options_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -175,6 +174,142 @@ var file_api_options_proto_extTypes = []protoimpl.ExtensionInfo{ Tag: "varint,1040,opt,name=no_delay,def=0", Filename: "api_options.proto", }, + { + ExtendedType: (*descriptorpb.MessageOptions)(nil), + ExtensionType: (*string)(nil), + Field: 1041, + Name: "base_class", + Tag: "bytes,1041,opt,name=base_class", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 1042, + Name: "inline_encode", + Tag: "varint,1042,opt,name=inline_encode,def=0", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 1043, + Name: "speed_optimized", + Tag: "varint,1043,opt,name=speed_optimized,def=0", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 1042, + Name: "field_ifdef", + Tag: "bytes,1042,opt,name=field_ifdef", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*uint32)(nil), + Field: 50007, + Name: "fixed_array_size", + Tag: "varint,50007,opt,name=fixed_array_size", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50009, + Name: "fixed_array_skip_zero", + Tag: "varint,50009,opt,name=fixed_array_skip_zero,def=0", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 50010, + Name: "fixed_array_size_define", + Tag: "bytes,50010,opt,name=fixed_array_size_define", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 50011, + Name: "fixed_array_with_length_define", + Tag: "bytes,50011,opt,name=fixed_array_with_length_define", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50012, + Name: "pointer_to_buffer", + Tag: "varint,50012,opt,name=pointer_to_buffer,def=0", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 50001, + Name: "container_pointer", + Tag: "bytes,50001,opt,name=container_pointer", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50013, + Name: "fixed_vector", + Tag: "varint,50013,opt,name=fixed_vector,def=0", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 50014, + Name: "container_pointer_no_template", + Tag: "bytes,50014,opt,name=container_pointer_no_template", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50015, + Name: "packed_buffer", + Tag: "varint,50015,opt,name=packed_buffer,def=0", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50016, + Name: "force", + Tag: "varint,50016,opt,name=force,def=0", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*uint32)(nil), + Field: 50017, + Name: "max_value", + Tag: "varint,50017,opt,name=max_value", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*uint32)(nil), + Field: 50018, + Name: "max_data_length", + Tag: "varint,50018,opt,name=max_data_length", + Filename: "api_options.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50019, + Name: "mac_address", + Tag: "varint,50019,opt,name=mac_address,def=0", + Filename: "api_options.proto", + }, } // Extension fields to descriptorpb.MethodOptions. @@ -197,87 +332,213 @@ var ( E_Log = &file_api_options_proto_extTypes[5] // optional bool no_delay = 1040; E_NoDelay = &file_api_options_proto_extTypes[6] + // optional string base_class = 1041; + E_BaseClass = &file_api_options_proto_extTypes[7] + // optional bool inline_encode = 1042; + E_InlineEncode = &file_api_options_proto_extTypes[8] + // optional bool speed_optimized = 1043; + E_SpeedOptimized = &file_api_options_proto_extTypes[9] +) + +// Extension fields to descriptorpb.FieldOptions. +var ( + // optional string field_ifdef = 1042; + E_FieldIfdef = &file_api_options_proto_extTypes[10] + // optional uint32 fixed_array_size = 50007; + E_FixedArraySize = &file_api_options_proto_extTypes[11] + // optional bool fixed_array_skip_zero = 50009; + E_FixedArraySkipZero = &file_api_options_proto_extTypes[12] + // optional string fixed_array_size_define = 50010; + E_FixedArraySizeDefine = &file_api_options_proto_extTypes[13] + // optional string fixed_array_with_length_define = 50011; + E_FixedArrayWithLengthDefine = &file_api_options_proto_extTypes[14] + // pointer_to_buffer: Use pointer instead of array for fixed-size byte fields + // When set, the field will be declared as a pointer (const uint8_t *data) + // instead of an array (uint8_t data[N]). This allows zero-copy on decode + // by pointing directly to the protobuf buffer. The buffer must remain valid + // until the message is processed (which is guaranteed for stack-allocated messages). + // + // optional bool pointer_to_buffer = 50012; + E_PointerToBuffer = &file_api_options_proto_extTypes[15] + // container_pointer: Zero-copy optimization for repeated fields. + // + // When container_pointer is set on a repeated field, the generated message will + // store a pointer to an existing container instead of copying the data into the + // message's own repeated field. This eliminates heap allocations and improves performance. + // + // Requirements for safe usage: + // 1. The source container must remain valid until the message is encoded + // 2. Messages must be encoded immediately (which ESPHome does by default) + // 3. The container type must match the field type exactly + // + // Supported container types: + // - "std::vector" for most repeated fields + // - "std::set" for unique/sorted data + // - Full type specification required for enums (e.g., "std::set") + // + // Example usage in .proto file: + // + // repeated string supported_modes = 12 [(container_pointer) = "std::set"]; + // repeated ColorMode color_modes = 13 [(container_pointer) = "std::set"]; + // + // The corresponding C++ code must provide const reference access to a container + // that matches the specified type and remains valid during message encoding. + // This is typically done through methods returning const T& or special accessor + // methods like get_options() or supported_modes_for_api_(). + // + // optional string container_pointer = 50001; + E_ContainerPointer = &file_api_options_proto_extTypes[16] + // fixed_vector: Use FixedVector instead of std::vector for repeated fields + // When set, the repeated field will use FixedVector which requires calling + // init(size) before adding elements. This eliminates std::vector template overhead + // and is ideal when the exact size is known before populating the array. + // + // optional bool fixed_vector = 50013; + E_FixedVector = &file_api_options_proto_extTypes[17] + // container_pointer_no_template: Use a non-template container type for repeated fields + // Similar to container_pointer, but for containers that don't take template parameters. + // The container type is used as-is without appending element type. + // The container must have: + // - begin() and end() methods returning iterators + // - empty() method + // Example: [(container_pointer_no_template) = "light::ColorModeMask"] + // + // generates: const light::ColorModeMask *supported_color_modes{}; + // + // optional string container_pointer_no_template = 50014; + E_ContainerPointerNoTemplate = &file_api_options_proto_extTypes[18] + // 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; + E_PackedBuffer = &file_api_options_proto_extTypes[19] + // force: Always encode this field, even when its value equals the proto3 default. + // Skips the zero/empty check in calculate_size() and encode(), using the _force + // variant of the calc_ method. Use on fields that are almost always non-default + // to eliminate dead branches on hot paths. + // + // optional bool force = 50016; + E_Force = &file_api_options_proto_extTypes[20] + // max_value: Maximum value a field can have. + // When max_value < 128, the code generator emits constant-size calculations + // and direct byte writes instead of varint branching, since the encoded varint + // is guaranteed to be 1 byte. + // + // optional uint32 max_value = 50017; + E_MaxValue = &file_api_options_proto_extTypes[21] + // max_data_length: Maximum length of a string or bytes field. + // When max_data_length < 128, the code generator emits constant-size + // length varint calculations and direct byte writes, since the length + // varint is guaranteed to be 1 byte. + // + // optional uint32 max_data_length = 50018; + E_MaxDataLength = &file_api_options_proto_extTypes[22] + // mac_address: Field is a 48-bit MAC address stored in a uint64. + // Emits encode_varint_raw_48bit which has a 7-byte fast path that avoids + // the per-byte loop when the upper bits are non-zero (the common case + // for real MAC addresses, since OUIs occupy the top 24 bits). + // + // optional bool mac_address = 50019; + E_MacAddress = &file_api_options_proto_extTypes[23] ) var File_api_options_proto protoreflect.FileDescriptor -var file_api_options_proto_rawDesc = []byte{ - 0x0a, 0x11, 0x61, 0x70, 0x69, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x06, 0x0a, 0x04, 0x76, 0x6f, 0x69, 0x64, 0x2a, 0x46, 0x0a, - 0x0d, 0x41, 0x50, 0x49, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, - 0x0a, 0x0b, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x42, 0x4f, 0x54, 0x48, 0x10, 0x00, 0x12, - 0x11, 0x0a, 0x0d, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, - 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x43, 0x4c, 0x49, - 0x45, 0x4e, 0x54, 0x10, 0x02, 0x3a, 0x5b, 0x0a, 0x16, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x73, - 0x65, 0x74, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x8e, 0x08, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x14, 0x6e, 0x65, - 0x65, 0x64, 0x73, 0x53, 0x65, 0x74, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x3a, 0x58, 0x0a, 0x14, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x61, 0x75, 0x74, 0x68, - 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x8f, 0x08, 0x20, 0x01, 0x28, - 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x13, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x41, 0x75, - 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x33, 0x0a, 0x02, - 0x69, 0x64, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x8c, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x3a, 0x01, 0x30, 0x52, 0x02, 0x69, - 0x64, 0x3a, 0x55, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x8d, 0x08, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x41, 0x50, 0x49, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x3a, 0x0b, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x42, 0x4f, 0x54, 0x48, - 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x36, 0x0a, 0x05, 0x69, 0x66, 0x64, 0x65, - 0x66, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x8e, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x66, 0x64, 0x65, 0x66, - 0x3a, 0x38, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x8f, 0x08, 0x20, 0x01, 0x28, 0x08, 0x3a, - 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x3a, 0x42, 0x0a, 0x08, 0x6e, 0x6f, - 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x90, 0x08, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x07, 0x6e, 0x6f, 0x44, 0x65, 0x6c, 0x61, 0x79, -} +const file_api_options_proto_rawDesc = "" + + "\n" + + "\x11api_options.proto\x1a google/protobuf/descriptor.proto\"\x06\n" + + "\x04void*F\n" + + "\rAPISourceType\x12\x0f\n" + + "\vSOURCE_BOTH\x10\x00\x12\x11\n" + + "\rSOURCE_SERVER\x10\x01\x12\x11\n" + + "\rSOURCE_CLIENT\x10\x02:[\n" + + "\x16needs_setup_connection\x12\x1e.google.protobuf.MethodOptions\x18\x8e\b \x01(\b:\x04trueR\x14needsSetupConnection:X\n" + + "\x14needs_authentication\x12\x1e.google.protobuf.MethodOptions\x18\x8f\b \x01(\b:\x04trueR\x13needsAuthentication:3\n" + + "\x02id\x12\x1f.google.protobuf.MessageOptions\x18\x8c\b \x01(\r:\x010R\x02id:U\n" + + "\x06source\x12\x1f.google.protobuf.MessageOptions\x18\x8d\b \x01(\x0e2\x0e.APISourceType:\vSOURCE_BOTHR\x06source:6\n" + + "\x05ifdef\x12\x1f.google.protobuf.MessageOptions\x18\x8e\b \x01(\tR\x05ifdef:8\n" + + "\x03log\x12\x1f.google.protobuf.MessageOptions\x18\x8f\b \x01(\b:\x04trueR\x03log:B\n" + + "\bno_delay\x12\x1f.google.protobuf.MessageOptions\x18\x90\b \x01(\b:\x05falseR\anoDelay:?\n" + + "\n" + + "base_class\x12\x1f.google.protobuf.MessageOptions\x18\x91\b \x01(\tR\tbaseClass:L\n" + + "\rinline_encode\x12\x1f.google.protobuf.MessageOptions\x18\x92\b \x01(\b:\x05falseR\finlineEncode:P\n" + + "\x0fspeed_optimized\x12\x1f.google.protobuf.MessageOptions\x18\x93\b \x01(\b:\x05falseR\x0espeedOptimized:?\n" + + "\vfield_ifdef\x12\x1d.google.protobuf.FieldOptions\x18\x92\b \x01(\tR\n" + + "fieldIfdef:I\n" + + "\x10fixed_array_size\x12\x1d.google.protobuf.FieldOptions\x18׆\x03 \x01(\rR\x0efixedArraySize:Y\n" + + "\x15fixed_array_skip_zero\x12\x1d.google.protobuf.FieldOptions\x18ن\x03 \x01(\b:\x05falseR\x12fixedArraySkipZero:V\n" + + "\x17fixed_array_size_define\x12\x1d.google.protobuf.FieldOptions\x18چ\x03 \x01(\tR\x14fixedArraySizeDefine:c\n" + + "\x1efixed_array_with_length_define\x12\x1d.google.protobuf.FieldOptions\x18ۆ\x03 \x01(\tR\x1afixedArrayWithLengthDefine:R\n" + + "\x11pointer_to_buffer\x12\x1d.google.protobuf.FieldOptions\x18܆\x03 \x01(\b:\x05falseR\x0fpointerToBuffer:L\n" + + "\x11container_pointer\x12\x1d.google.protobuf.FieldOptions\x18ц\x03 \x01(\tR\x10containerPointer:I\n" + + "\ffixed_vector\x12\x1d.google.protobuf.FieldOptions\x18݆\x03 \x01(\b:\x05falseR\vfixedVector:b\n" + + "\x1dcontainer_pointer_no_template\x12\x1d.google.protobuf.FieldOptions\x18ކ\x03 \x01(\tR\x1acontainerPointerNoTemplate:K\n" + + "\rpacked_buffer\x12\x1d.google.protobuf.FieldOptions\x18߆\x03 \x01(\b:\x05falseR\fpackedBuffer:<\n" + + "\x05force\x12\x1d.google.protobuf.FieldOptions\x18\xe0\x86\x03 \x01(\b:\x05falseR\x05force:<\n" + + "\tmax_value\x12\x1d.google.protobuf.FieldOptions\x18\xe1\x86\x03 \x01(\rR\bmaxValue:G\n" + + "\x0fmax_data_length\x12\x1d.google.protobuf.FieldOptions\x18\xe2\x86\x03 \x01(\rR\rmaxDataLength:G\n" + + "\vmac_address\x12\x1d.google.protobuf.FieldOptions\x18\xe3\x86\x03 \x01(\b:\x05falseR\n" + + "macAddress" var ( file_api_options_proto_rawDescOnce sync.Once - file_api_options_proto_rawDescData = file_api_options_proto_rawDesc + file_api_options_proto_rawDescData []byte ) func file_api_options_proto_rawDescGZIP() []byte { file_api_options_proto_rawDescOnce.Do(func() { - file_api_options_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_options_proto_rawDescData) + file_api_options_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_options_proto_rawDesc), len(file_api_options_proto_rawDesc))) }) return file_api_options_proto_rawDescData } var file_api_options_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_api_options_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_api_options_proto_goTypes = []interface{}{ +var file_api_options_proto_goTypes = []any{ (APISourceType)(0), // 0: APISourceType (*Void)(nil), // 1: void (*descriptorpb.MethodOptions)(nil), // 2: google.protobuf.MethodOptions (*descriptorpb.MessageOptions)(nil), // 3: google.protobuf.MessageOptions + (*descriptorpb.FieldOptions)(nil), // 4: google.protobuf.FieldOptions } var file_api_options_proto_depIdxs = []int32{ - 2, // 0: needs_setup_connection:extendee -> google.protobuf.MethodOptions - 2, // 1: needs_authentication:extendee -> google.protobuf.MethodOptions - 3, // 2: id:extendee -> google.protobuf.MessageOptions - 3, // 3: source:extendee -> google.protobuf.MessageOptions - 3, // 4: ifdef:extendee -> google.protobuf.MessageOptions - 3, // 5: log:extendee -> google.protobuf.MessageOptions - 3, // 6: no_delay:extendee -> google.protobuf.MessageOptions - 0, // 7: source:type_name -> APISourceType - 8, // [8:8] is the sub-list for method output_type - 8, // [8:8] is the sub-list for method input_type - 7, // [7:8] is the sub-list for extension type_name - 0, // [0:7] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name + 2, // 0: needs_setup_connection:extendee -> google.protobuf.MethodOptions + 2, // 1: needs_authentication:extendee -> google.protobuf.MethodOptions + 3, // 2: id:extendee -> google.protobuf.MessageOptions + 3, // 3: source:extendee -> google.protobuf.MessageOptions + 3, // 4: ifdef:extendee -> google.protobuf.MessageOptions + 3, // 5: log:extendee -> google.protobuf.MessageOptions + 3, // 6: no_delay:extendee -> google.protobuf.MessageOptions + 3, // 7: base_class:extendee -> google.protobuf.MessageOptions + 3, // 8: inline_encode:extendee -> google.protobuf.MessageOptions + 3, // 9: speed_optimized:extendee -> google.protobuf.MessageOptions + 4, // 10: field_ifdef:extendee -> google.protobuf.FieldOptions + 4, // 11: fixed_array_size:extendee -> google.protobuf.FieldOptions + 4, // 12: fixed_array_skip_zero:extendee -> google.protobuf.FieldOptions + 4, // 13: fixed_array_size_define:extendee -> google.protobuf.FieldOptions + 4, // 14: fixed_array_with_length_define:extendee -> google.protobuf.FieldOptions + 4, // 15: pointer_to_buffer:extendee -> google.protobuf.FieldOptions + 4, // 16: container_pointer:extendee -> google.protobuf.FieldOptions + 4, // 17: fixed_vector:extendee -> google.protobuf.FieldOptions + 4, // 18: container_pointer_no_template:extendee -> google.protobuf.FieldOptions + 4, // 19: packed_buffer:extendee -> google.protobuf.FieldOptions + 4, // 20: force:extendee -> google.protobuf.FieldOptions + 4, // 21: max_value:extendee -> google.protobuf.FieldOptions + 4, // 22: max_data_length:extendee -> google.protobuf.FieldOptions + 4, // 23: mac_address:extendee -> google.protobuf.FieldOptions + 0, // 24: source:type_name -> APISourceType + 25, // [25:25] is the sub-list for method output_type + 25, // [25:25] is the sub-list for method input_type + 24, // [24:25] is the sub-list for extension type_name + 0, // [0:24] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name } func init() { file_api_options_proto_init() } @@ -285,28 +546,14 @@ func file_api_options_proto_init() { if File_api_options_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_api_options_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Void); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_api_options_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_options_proto_rawDesc), len(file_api_options_proto_rawDesc)), NumEnums: 1, NumMessages: 1, - NumExtensions: 7, + NumExtensions: 24, NumServices: 0, }, GoTypes: file_api_options_proto_goTypes, @@ -316,7 +563,6 @@ func file_api_options_proto_init() { ExtensionInfos: file_api_options_proto_extTypes, }.Build() File_api_options_proto = out.File - file_api_options_proto_rawDesc = nil file_api_options_proto_goTypes = nil file_api_options_proto_depIdxs = nil } diff --git a/pkg/api/helper.go b/pkg/api/helper.go index d43176c..c3b1fc2 100644 --- a/pkg/api/helper.go +++ b/pkg/api/helper.go @@ -6,93 +6,157 @@ import ( "google.golang.org/protobuf/proto" ) -// Request and response types from/to esphome +// ESPHome API message type IDs (api.proto option (id), release 2026.7.0). const ( - UndefinedTypeID = iota - HelloRequestTypeID - HelloResponseTypeID - ConnectRequestTypeID - ConnectResponseTypeID - DisconnectRequestTypeID - DisconnectResponseTypeID - PingRequestTypeID - PingResponseTypeID - DeviceInfoRequestTypeID - DeviceInfoResponseTypeID - ListEntitiesRequestTypeID - ListEntitiesBinarySensorResponseTypeID - ListEntitiesCoverResponseTypeID - ListEntitiesFanResponseTypeID - ListEntitiesLightResponseTypeID - ListEntitiesSensorResponseTypeID - ListEntitiesSwitchResponseTypeID - ListEntitiesTextSensorResponseTypeID - ListEntitiesDoneResponseTypeID - SubscribeStatesRequestTypeID - BinarySensorStateResponseTypeID - CoverStateResponseTypeID - FanStateResponseTypeID - LightStateResponseTypeID - SensorStateResponseTypeID - SwitchStateResponseTypeID - TextSensorStateResponseTypeID - SubscribeLogsRequestTypeID - SubscribeLogsResponseTypeID - CoverCommandRequestTypeID - FanCommandRequestTypeID - LightCommandRequestTypeID - SwitchCommandRequestTypeID - SubscribeHomeAssistantServicesRequestTypeID - HomeAssistantServiceResponseTypeID - GetTimeRequestTypeID - GetTimeResponseTypeID - SubscribeHomeAssistantStatesRequestTypeID - SubscribeHomeAssistantStateResponseTypeID - HomeAssistantStateResponseTypeID - ListEntitiesServicesResponseTypeID - ExecuteServiceRequestTypeID - ListEntitiesCameraResponseTypeID - CameraImageResponseTypeID - CameraImageRequestTypeID - ListEntitiesClimateResponseTypeID - ClimateStateResponseTypeID - ClimateCommandRequestTypeID - ListEntitiesNumberResponseTypeID - NumberStateResponseTypeID - NumberCommandRequestTypeID - ListEntitiesSelectResponseTypeID - SelectStateResponseTypeID - SelectCommandRequestTypeID - UnknownTypeID55 - UnknownTypeID56 - UnknownTypeID57 - ListEntitiesLockResponseTypeID - LockStateResponseTypeID - LockCommandRequestTypeID - ListEntitiesButtonResponseTypeID - ButtonCommandRequestTypeID - ListEntitiesMediaPlayerResponseTypeID - MediaPlayerStateResponseTypeID - MediaPlayerCommandRequestTypeID - SubscribeBluetoothLEAdvertisementsRequestID - BluetoothLEAdvertisementResponseID - BluetoothDeviceRequestID - BluetoothDeviceConnectionResponseID - BluetoothGATTGetServicesRequestID - BluetoothGATTGetServicesResponseID - BluetoothGATTGetServicesDoneResponseID - BluetoothGATTReadRequestID - BluetoothGATTReadResponseID - BluetoothGATTWriteRequestID - BluetoothGATTReadDescriptorRequestID - BluetoothGATTWriteDescriptorRequestID - BluetoothGATTNotifyRequestID - BluetoothGATTNotifyDataResponseID - SubscribeBluetoothConnectionsFreeRequestID - BluetoothConnectionsFreeResponseID - BluetoothGATTErrorResponseID - BluetoothGATTWriteResponseID - BluetoothGATTNotifyResponseID + UndefinedTypeID = 0 + HelloRequestTypeID = 1 + HelloResponseTypeID = 2 + AuthenticationRequestTypeID = 3 + AuthenticationResponseTypeID = 4 + DisconnectRequestTypeID = 5 + DisconnectResponseTypeID = 6 + PingRequestTypeID = 7 + PingResponseTypeID = 8 + DeviceInfoRequestTypeID = 9 + DeviceInfoResponseTypeID = 10 + ListEntitiesRequestTypeID = 11 + ListEntitiesBinarySensorResponseTypeID = 12 + ListEntitiesCoverResponseTypeID = 13 + ListEntitiesFanResponseTypeID = 14 + ListEntitiesLightResponseTypeID = 15 + ListEntitiesSensorResponseTypeID = 16 + ListEntitiesSwitchResponseTypeID = 17 + ListEntitiesTextSensorResponseTypeID = 18 + ListEntitiesDoneResponseTypeID = 19 + SubscribeStatesRequestTypeID = 20 + BinarySensorStateResponseTypeID = 21 + CoverStateResponseTypeID = 22 + FanStateResponseTypeID = 23 + LightStateResponseTypeID = 24 + SensorStateResponseTypeID = 25 + SwitchStateResponseTypeID = 26 + TextSensorStateResponseTypeID = 27 + SubscribeLogsRequestTypeID = 28 + SubscribeLogsResponseTypeID = 29 + CoverCommandRequestTypeID = 30 + FanCommandRequestTypeID = 31 + LightCommandRequestTypeID = 32 + SwitchCommandRequestTypeID = 33 + SubscribeHomeassistantServicesRequestTypeID = 34 + HomeassistantActionRequestTypeID = 35 + GetTimeRequestTypeID = 36 + GetTimeResponseTypeID = 37 + SubscribeHomeAssistantStatesRequestTypeID = 38 + SubscribeHomeAssistantStateResponseTypeID = 39 + HomeAssistantStateResponseTypeID = 40 + ListEntitiesServicesResponseTypeID = 41 + ExecuteServiceRequestTypeID = 42 + ListEntitiesCameraResponseTypeID = 43 + CameraImageResponseTypeID = 44 + CameraImageRequestTypeID = 45 + ListEntitiesClimateResponseTypeID = 46 + ClimateStateResponseTypeID = 47 + ClimateCommandRequestTypeID = 48 + ListEntitiesNumberResponseTypeID = 49 + NumberStateResponseTypeID = 50 + NumberCommandRequestTypeID = 51 + ListEntitiesSelectResponseTypeID = 52 + SelectStateResponseTypeID = 53 + SelectCommandRequestTypeID = 54 + ListEntitiesSirenResponseTypeID = 55 + SirenStateResponseTypeID = 56 + SirenCommandRequestTypeID = 57 + ListEntitiesLockResponseTypeID = 58 + LockStateResponseTypeID = 59 + LockCommandRequestTypeID = 60 + ListEntitiesButtonResponseTypeID = 61 + ButtonCommandRequestTypeID = 62 + ListEntitiesMediaPlayerResponseTypeID = 63 + MediaPlayerStateResponseTypeID = 64 + MediaPlayerCommandRequestTypeID = 65 + SubscribeBluetoothLEAdvertisementsRequestTypeID = 66 + BluetoothLEAdvertisementResponseTypeID = 67 + BluetoothDeviceRequestTypeID = 68 + BluetoothDeviceConnectionResponseTypeID = 69 + BluetoothGATTGetServicesRequestTypeID = 70 + BluetoothGATTGetServicesResponseTypeID = 71 + BluetoothGATTGetServicesDoneResponseTypeID = 72 + BluetoothGATTReadRequestTypeID = 73 + BluetoothGATTReadResponseTypeID = 74 + BluetoothGATTWriteRequestTypeID = 75 + BluetoothGATTReadDescriptorRequestTypeID = 76 + BluetoothGATTWriteDescriptorRequestTypeID = 77 + BluetoothGATTNotifyRequestTypeID = 78 + BluetoothGATTNotifyDataResponseTypeID = 79 + SubscribeBluetoothConnectionsFreeRequestTypeID = 80 + BluetoothConnectionsFreeResponseTypeID = 81 + BluetoothGATTErrorResponseTypeID = 82 + BluetoothGATTWriteResponseTypeID = 83 + BluetoothGATTNotifyResponseTypeID = 84 + BluetoothDevicePairingResponseTypeID = 85 + BluetoothDeviceUnpairingResponseTypeID = 86 + UnsubscribeBluetoothLEAdvertisementsRequestTypeID = 87 + BluetoothDeviceClearCacheResponseTypeID = 88 + SubscribeVoiceAssistantRequestTypeID = 89 + VoiceAssistantRequestTypeID = 90 + VoiceAssistantResponseTypeID = 91 + VoiceAssistantEventResponseTypeID = 92 + BluetoothLERawAdvertisementsResponseTypeID = 93 + ListEntitiesAlarmControlPanelResponseTypeID = 94 + AlarmControlPanelStateResponseTypeID = 95 + AlarmControlPanelCommandRequestTypeID = 96 + ListEntitiesTextResponseTypeID = 97 + TextStateResponseTypeID = 98 + TextCommandRequestTypeID = 99 + ListEntitiesDateResponseTypeID = 100 + DateStateResponseTypeID = 101 + DateCommandRequestTypeID = 102 + ListEntitiesTimeResponseTypeID = 103 + TimeStateResponseTypeID = 104 + TimeCommandRequestTypeID = 105 + VoiceAssistantAudioTypeID = 106 + ListEntitiesEventResponseTypeID = 107 + EventResponseTypeID = 108 + ListEntitiesValveResponseTypeID = 109 + ValveStateResponseTypeID = 110 + ValveCommandRequestTypeID = 111 + ListEntitiesDateTimeResponseTypeID = 112 + DateTimeStateResponseTypeID = 113 + DateTimeCommandRequestTypeID = 114 + VoiceAssistantTimerEventResponseTypeID = 115 + ListEntitiesUpdateResponseTypeID = 116 + UpdateStateResponseTypeID = 117 + UpdateCommandRequestTypeID = 118 + VoiceAssistantAnnounceRequestTypeID = 119 + VoiceAssistantAnnounceFinishedTypeID = 120 + VoiceAssistantConfigurationRequestTypeID = 121 + VoiceAssistantConfigurationResponseTypeID = 122 + VoiceAssistantSetConfigurationTypeID = 123 + NoiseEncryptionSetKeyRequestTypeID = 124 + NoiseEncryptionSetKeyResponseTypeID = 125 + BluetoothScannerStateResponseTypeID = 126 + BluetoothScannerSetModeRequestTypeID = 127 + ZWaveProxyFrameTypeID = 128 + ZWaveProxyRequestTypeID = 129 + HomeassistantActionResponseTypeID = 130 + ExecuteServiceResponseTypeID = 131 + ListEntitiesWaterHeaterResponseTypeID = 132 + WaterHeaterStateResponseTypeID = 133 + WaterHeaterCommandRequestTypeID = 134 + ListEntitiesInfraredResponseTypeID = 135 + InfraredRFTransmitRawTimingsRequestTypeID = 136 + InfraredRFReceiveEventTypeID = 137 + SerialProxyConfigureRequestTypeID = 138 + SerialProxyDataReceivedTypeID = 139 + SerialProxyWriteRequestTypeID = 140 + SerialProxySetModemPinsRequestTypeID = 141 + SerialProxyGetModemPinsRequestTypeID = 142 + SerialProxyGetModemPinsResponseTypeID = 143 + SerialProxyRequestTypeID = 144 + BluetoothSetConnectionParamsRequestTypeID = 145 + BluetoothSetConnectionParamsResponseTypeID = 146 + SerialProxyRequestResponseTypeID = 147 + ListEntitiesRadioFrequencyResponseTypeID = 148 ) func TypeID(message interface{}) uint64 { @@ -105,18 +169,17 @@ func TypeID(message interface{}) uint64 { message = reflect.ValueOf(message).Elem().Interface() } switch message.(type) { - case HelloRequest: return HelloRequestTypeID case HelloResponse: return HelloResponseTypeID - case ConnectRequest: - return ConnectRequestTypeID + case AuthenticationRequest: + return AuthenticationRequestTypeID - case ConnectResponse: - return ConnectResponseTypeID + case AuthenticationResponse: + return AuthenticationResponseTypeID case DisconnectRequest: return DisconnectRequestTypeID @@ -206,10 +269,10 @@ func TypeID(message interface{}) uint64 { return SwitchCommandRequestTypeID case SubscribeHomeassistantServicesRequest: - return SubscribeHomeAssistantServicesRequestTypeID + return SubscribeHomeassistantServicesRequestTypeID - case HomeassistantServiceResponse: - return HomeAssistantServiceResponseTypeID + case HomeassistantActionRequest: + return HomeassistantActionRequestTypeID case GetTimeRequest: return GetTimeRequestTypeID @@ -250,104 +313,305 @@ func TypeID(message interface{}) uint64 { case ClimateCommandRequest: return ClimateCommandRequestTypeID - case NumberCommandRequest: - return ClimateCommandRequestTypeID - - case SelectCommandRequest: - return SelectCommandRequestTypeID - - case ButtonCommandRequest: - return ButtonCommandRequestTypeID - - case LockCommandRequest: - return LockCommandRequestTypeID - - case MediaPlayerCommandRequest: - return MediaPlayerCommandRequestTypeID - case ListEntitiesNumberResponse: return ListEntitiesNumberResponseTypeID case NumberStateResponse: return NumberStateResponseTypeID + case NumberCommandRequest: + return NumberCommandRequestTypeID + case ListEntitiesSelectResponse: return ListEntitiesSelectResponseTypeID case SelectStateResponse: return SelectStateResponseTypeID + case SelectCommandRequest: + return SelectCommandRequestTypeID + + case ListEntitiesSirenResponse: + return ListEntitiesSirenResponseTypeID + + case SirenStateResponse: + return SirenStateResponseTypeID + + case SirenCommandRequest: + return SirenCommandRequestTypeID + case ListEntitiesLockResponse: return ListEntitiesLockResponseTypeID case LockStateResponse: return LockStateResponseTypeID + case LockCommandRequest: + return LockCommandRequestTypeID + case ListEntitiesButtonResponse: return ListEntitiesButtonResponseTypeID + case ButtonCommandRequest: + return ButtonCommandRequestTypeID + case ListEntitiesMediaPlayerResponse: return ListEntitiesMediaPlayerResponseTypeID case MediaPlayerStateResponse: return MediaPlayerStateResponseTypeID + case MediaPlayerCommandRequest: + return MediaPlayerCommandRequestTypeID + case SubscribeBluetoothLEAdvertisementsRequest: - return SubscribeBluetoothLEAdvertisementsRequestID + return SubscribeBluetoothLEAdvertisementsRequestTypeID case BluetoothLEAdvertisementResponse: - return BluetoothLEAdvertisementResponseID + return BluetoothLEAdvertisementResponseTypeID case BluetoothDeviceRequest: - return BluetoothDeviceRequestID + return BluetoothDeviceRequestTypeID case BluetoothDeviceConnectionResponse: - return BluetoothDeviceConnectionResponseID + return BluetoothDeviceConnectionResponseTypeID case BluetoothGATTGetServicesRequest: - return BluetoothGATTGetServicesRequestID + return BluetoothGATTGetServicesRequestTypeID case BluetoothGATTGetServicesResponse: - return BluetoothGATTGetServicesResponseID + return BluetoothGATTGetServicesResponseTypeID case BluetoothGATTGetServicesDoneResponse: - return BluetoothGATTGetServicesDoneResponseID + return BluetoothGATTGetServicesDoneResponseTypeID case BluetoothGATTReadRequest: - return BluetoothGATTReadRequestID + return BluetoothGATTReadRequestTypeID case BluetoothGATTReadResponse: - return BluetoothGATTReadResponseID + return BluetoothGATTReadResponseTypeID case BluetoothGATTWriteRequest: - return BluetoothGATTWriteRequestID + return BluetoothGATTWriteRequestTypeID case BluetoothGATTReadDescriptorRequest: - return BluetoothGATTReadDescriptorRequestID + return BluetoothGATTReadDescriptorRequestTypeID case BluetoothGATTWriteDescriptorRequest: - return BluetoothGATTWriteDescriptorRequestID + return BluetoothGATTWriteDescriptorRequestTypeID case BluetoothGATTNotifyRequest: - return BluetoothGATTNotifyRequestID + return BluetoothGATTNotifyRequestTypeID case BluetoothGATTNotifyDataResponse: - return BluetoothGATTNotifyDataResponseID + return BluetoothGATTNotifyDataResponseTypeID case SubscribeBluetoothConnectionsFreeRequest: - return SubscribeBluetoothConnectionsFreeRequestID + return SubscribeBluetoothConnectionsFreeRequestTypeID case BluetoothConnectionsFreeResponse: - return BluetoothConnectionsFreeResponseID + return BluetoothConnectionsFreeResponseTypeID case BluetoothGATTErrorResponse: - return BluetoothGATTErrorResponseID + return BluetoothGATTErrorResponseTypeID case BluetoothGATTWriteResponse: - return BluetoothGATTWriteResponseID + return BluetoothGATTWriteResponseTypeID case BluetoothGATTNotifyResponse: - return BluetoothGATTNotifyResponseID + return BluetoothGATTNotifyResponseTypeID + + case BluetoothDevicePairingResponse: + return BluetoothDevicePairingResponseTypeID + + case BluetoothDeviceUnpairingResponse: + return BluetoothDeviceUnpairingResponseTypeID + + case UnsubscribeBluetoothLEAdvertisementsRequest: + return UnsubscribeBluetoothLEAdvertisementsRequestTypeID + + case BluetoothDeviceClearCacheResponse: + return BluetoothDeviceClearCacheResponseTypeID + + case SubscribeVoiceAssistantRequest: + return SubscribeVoiceAssistantRequestTypeID + + case VoiceAssistantRequest: + return VoiceAssistantRequestTypeID + + case VoiceAssistantResponse: + return VoiceAssistantResponseTypeID + + case VoiceAssistantEventResponse: + return VoiceAssistantEventResponseTypeID + + case BluetoothLERawAdvertisementsResponse: + return BluetoothLERawAdvertisementsResponseTypeID + + case ListEntitiesAlarmControlPanelResponse: + return ListEntitiesAlarmControlPanelResponseTypeID + + case AlarmControlPanelStateResponse: + return AlarmControlPanelStateResponseTypeID + + case AlarmControlPanelCommandRequest: + return AlarmControlPanelCommandRequestTypeID + + case ListEntitiesTextResponse: + return ListEntitiesTextResponseTypeID + + case TextStateResponse: + return TextStateResponseTypeID + + case TextCommandRequest: + return TextCommandRequestTypeID + + case ListEntitiesDateResponse: + return ListEntitiesDateResponseTypeID + + case DateStateResponse: + return DateStateResponseTypeID + + case DateCommandRequest: + return DateCommandRequestTypeID + + case ListEntitiesTimeResponse: + return ListEntitiesTimeResponseTypeID + + case TimeStateResponse: + return TimeStateResponseTypeID + + case TimeCommandRequest: + return TimeCommandRequestTypeID + + case VoiceAssistantAudio: + return VoiceAssistantAudioTypeID + + case ListEntitiesEventResponse: + return ListEntitiesEventResponseTypeID + + case EventResponse: + return EventResponseTypeID + + case ListEntitiesValveResponse: + return ListEntitiesValveResponseTypeID + + case ValveStateResponse: + return ValveStateResponseTypeID + + case ValveCommandRequest: + return ValveCommandRequestTypeID + + case ListEntitiesDateTimeResponse: + return ListEntitiesDateTimeResponseTypeID + + case DateTimeStateResponse: + return DateTimeStateResponseTypeID + + case DateTimeCommandRequest: + return DateTimeCommandRequestTypeID + + case VoiceAssistantTimerEventResponse: + return VoiceAssistantTimerEventResponseTypeID + + case ListEntitiesUpdateResponse: + return ListEntitiesUpdateResponseTypeID + + case UpdateStateResponse: + return UpdateStateResponseTypeID + + case UpdateCommandRequest: + return UpdateCommandRequestTypeID + + case VoiceAssistantAnnounceRequest: + return VoiceAssistantAnnounceRequestTypeID + + case VoiceAssistantAnnounceFinished: + return VoiceAssistantAnnounceFinishedTypeID + + case VoiceAssistantConfigurationRequest: + return VoiceAssistantConfigurationRequestTypeID + + case VoiceAssistantConfigurationResponse: + return VoiceAssistantConfigurationResponseTypeID + + case VoiceAssistantSetConfiguration: + return VoiceAssistantSetConfigurationTypeID + + case NoiseEncryptionSetKeyRequest: + return NoiseEncryptionSetKeyRequestTypeID + + case NoiseEncryptionSetKeyResponse: + return NoiseEncryptionSetKeyResponseTypeID + + case BluetoothScannerStateResponse: + return BluetoothScannerStateResponseTypeID + + case BluetoothScannerSetModeRequest: + return BluetoothScannerSetModeRequestTypeID + + case ZWaveProxyFrame: + return ZWaveProxyFrameTypeID + + case ZWaveProxyRequest: + return ZWaveProxyRequestTypeID + + case HomeassistantActionResponse: + return HomeassistantActionResponseTypeID + + case ExecuteServiceResponse: + return ExecuteServiceResponseTypeID + + case ListEntitiesWaterHeaterResponse: + return ListEntitiesWaterHeaterResponseTypeID + + case WaterHeaterStateResponse: + return WaterHeaterStateResponseTypeID + + case WaterHeaterCommandRequest: + return WaterHeaterCommandRequestTypeID + + case ListEntitiesInfraredResponse: + return ListEntitiesInfraredResponseTypeID + + case InfraredRFTransmitRawTimingsRequest: + return InfraredRFTransmitRawTimingsRequestTypeID + + case InfraredRFReceiveEvent: + return InfraredRFReceiveEventTypeID + + case SerialProxyConfigureRequest: + return SerialProxyConfigureRequestTypeID + + case SerialProxyDataReceived: + return SerialProxyDataReceivedTypeID + + case SerialProxyWriteRequest: + return SerialProxyWriteRequestTypeID + + case SerialProxySetModemPinsRequest: + return SerialProxySetModemPinsRequestTypeID + + case SerialProxyGetModemPinsRequest: + return SerialProxyGetModemPinsRequestTypeID + + case SerialProxyGetModemPinsResponse: + return SerialProxyGetModemPinsResponseTypeID + + case SerialProxyRequest: + return SerialProxyRequestTypeID + + case BluetoothSetConnectionParamsRequest: + return BluetoothSetConnectionParamsRequestTypeID + + case BluetoothSetConnectionParamsResponse: + return BluetoothSetConnectionParamsResponseTypeID + + case SerialProxyRequestResponse: + return SerialProxyRequestResponseTypeID + + case ListEntitiesRadioFrequencyResponse: + return ListEntitiesRadioFrequencyResponseTypeID default: return UndefinedTypeID @@ -356,7 +620,6 @@ func TypeID(message interface{}) uint64 { func NewMessageByTypeID(typeID uint64) proto.Message { switch typeID { - case 1: return new(HelloRequest) @@ -364,10 +627,10 @@ func NewMessageByTypeID(typeID uint64) proto.Message { return new(HelloResponse) case 3: - return new(ConnectRequest) + return new(AuthenticationRequest) case 4: - return new(ConnectResponse) + return new(AuthenticationResponse) case 5: return new(DisconnectRequest) @@ -460,7 +723,7 @@ func NewMessageByTypeID(typeID uint64) proto.Message { return new(SubscribeHomeassistantServicesRequest) case 35: - return new(HomeassistantServiceResponse) + return new(HomeassistantActionRequest) case 36: return new(GetTimeRequest) @@ -519,14 +782,14 @@ func NewMessageByTypeID(typeID uint64) proto.Message { case 54: return new(SelectCommandRequest) - // case 55: - // return new(UnknownTypeID55) - // - // case 56: - // return new(UnknownTypeID56) - // - // case 57: - // return new(UnknownTypeID57) + case 55: + return new(ListEntitiesSirenResponse) + + case 56: + return new(SirenStateResponse) + + case 57: + return new(SirenCommandRequest) case 58: return new(ListEntitiesLockResponse) @@ -609,6 +872,198 @@ func NewMessageByTypeID(typeID uint64) proto.Message { case 84: return new(BluetoothGATTNotifyResponse) + case 85: + return new(BluetoothDevicePairingResponse) + + case 86: + return new(BluetoothDeviceUnpairingResponse) + + case 87: + return new(UnsubscribeBluetoothLEAdvertisementsRequest) + + case 88: + return new(BluetoothDeviceClearCacheResponse) + + case 89: + return new(SubscribeVoiceAssistantRequest) + + case 90: + return new(VoiceAssistantRequest) + + case 91: + return new(VoiceAssistantResponse) + + case 92: + return new(VoiceAssistantEventResponse) + + case 93: + return new(BluetoothLERawAdvertisementsResponse) + + case 94: + return new(ListEntitiesAlarmControlPanelResponse) + + case 95: + return new(AlarmControlPanelStateResponse) + + case 96: + return new(AlarmControlPanelCommandRequest) + + case 97: + return new(ListEntitiesTextResponse) + + case 98: + return new(TextStateResponse) + + case 99: + return new(TextCommandRequest) + + case 100: + return new(ListEntitiesDateResponse) + + case 101: + return new(DateStateResponse) + + case 102: + return new(DateCommandRequest) + + case 103: + return new(ListEntitiesTimeResponse) + + case 104: + return new(TimeStateResponse) + + case 105: + return new(TimeCommandRequest) + + case 106: + return new(VoiceAssistantAudio) + + case 107: + return new(ListEntitiesEventResponse) + + case 108: + return new(EventResponse) + + case 109: + return new(ListEntitiesValveResponse) + + case 110: + return new(ValveStateResponse) + + case 111: + return new(ValveCommandRequest) + + case 112: + return new(ListEntitiesDateTimeResponse) + + case 113: + return new(DateTimeStateResponse) + + case 114: + return new(DateTimeCommandRequest) + + case 115: + return new(VoiceAssistantTimerEventResponse) + + case 116: + return new(ListEntitiesUpdateResponse) + + case 117: + return new(UpdateStateResponse) + + case 118: + return new(UpdateCommandRequest) + + case 119: + return new(VoiceAssistantAnnounceRequest) + + case 120: + return new(VoiceAssistantAnnounceFinished) + + case 121: + return new(VoiceAssistantConfigurationRequest) + + case 122: + return new(VoiceAssistantConfigurationResponse) + + case 123: + return new(VoiceAssistantSetConfiguration) + + case 124: + return new(NoiseEncryptionSetKeyRequest) + + case 125: + return new(NoiseEncryptionSetKeyResponse) + + case 126: + return new(BluetoothScannerStateResponse) + + case 127: + return new(BluetoothScannerSetModeRequest) + + case 128: + return new(ZWaveProxyFrame) + + case 129: + return new(ZWaveProxyRequest) + + case 130: + return new(HomeassistantActionResponse) + + case 131: + return new(ExecuteServiceResponse) + + case 132: + return new(ListEntitiesWaterHeaterResponse) + + case 133: + return new(WaterHeaterStateResponse) + + case 134: + return new(WaterHeaterCommandRequest) + + case 135: + return new(ListEntitiesInfraredResponse) + + case 136: + return new(InfraredRFTransmitRawTimingsRequest) + + case 137: + return new(InfraredRFReceiveEvent) + + case 138: + return new(SerialProxyConfigureRequest) + + case 139: + return new(SerialProxyDataReceived) + + case 140: + return new(SerialProxyWriteRequest) + + case 141: + return new(SerialProxySetModemPinsRequest) + + case 142: + return new(SerialProxyGetModemPinsRequest) + + case 143: + return new(SerialProxyGetModemPinsResponse) + + case 144: + return new(SerialProxyRequest) + + case 145: + return new(BluetoothSetConnectionParamsRequest) + + case 146: + return new(BluetoothSetConnectionParamsResponse) + + case 147: + return new(SerialProxyRequestResponse) + + case 148: + return new(ListEntitiesRadioFrequencyResponse) + default: return nil } diff --git a/pkg/client/client.go b/pkg/client/client.go index 59e46bc..3e64300 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -2,8 +2,10 @@ package client import ( "bufio" + "errors" "fmt" "net" + "os" "sync" "time" @@ -14,18 +16,27 @@ import ( types "github.com/mycontroller-org/esphome_api/pkg/types" ) +// API version sent in HelloRequest. +const ( + ClientAPIVersionMajor uint32 = 1 + ClientAPIVersionMinor uint32 = 14 +) + // Client struct. type Client struct { ID string conn net.Conn reader *bufio.Reader - stopChan chan bool + stopChan chan struct{} // closed by requestStop + stopOnce sync.Once waitMapMutex sync.RWMutex waitMap map[uint64]chan proto.Message lastMessageAt time.Time callBackFunc types.CallBackFunc CommunicationTimeout time.Duration apiConn connection.ApiConnection + // DisconnectReason from device DisconnectRequest (0 if none). + DisconnectReason api.DisconnectReason } // GetClient returns esphome api client @@ -50,7 +61,7 @@ func GetClient(clientID, address, encryptionKey string, timeout time.Duration, c conn: conn, reader: bufio.NewReader(conn), waitMap: make(map[uint64]chan proto.Message), - stopChan: make(chan bool), + stopChan: make(chan struct{}), callBackFunc: callBackFunc, CommunicationTimeout: timeout, apiConn: apiConn, @@ -69,17 +80,23 @@ func GetClient(clientID, address, encryptionKey string, timeout time.Duration, c // Close the client func (c *Client) Close() error { _, err := c.SendAndWaitForResponse(&api.DisconnectRequest{}, api.DisconnectResponseTypeID) - select { - case c.stopChan <- true: - default: - } + c.requestStop() return err } +func (c *Client) requestStop() { + c.stopOnce.Do(func() { + close(c.stopChan) + _ = c.conn.SetDeadline(time.Now()) // unblock Read + }) +} + // Hello func func (c *Client) Hello() (*types.HelloResponse, error) { response, err := c.SendAndWaitForResponse(&api.HelloRequest{ - ClientInfo: c.ID, + ClientInfo: c.ID, + ApiVersionMajor: ClientAPIVersionMajor, + ApiVersionMinor: ClientAPIVersionMinor, }, api.HelloResponseTypeID) if err != nil { return nil, err @@ -96,24 +113,30 @@ func (c *Client) Hello() (*types.HelloResponse, error) { }, nil } -// Login func +// Login uses the legacy API password. Removed in ESPHome 2026.1.0; use Hello() instead. func (c *Client) Login(password string) error { - _, err := c.Hello() - if err != nil { + if _, err := c.Hello(); err != nil { return err } - message, err := c.SendAndWaitForResponse(&api.ConnectRequest{ - Password: password, - }, api.ConnectResponseTypeID) + message, err := c.SendAndWaitForResponse( + &api.AuthenticationRequest{Password: password}, + api.AuthenticationResponseTypeID, + ) if err != nil { + if errors.Is(err, types.ErrCommunicationTimeout) { + // No reply: treat as modern device without password auth. + return nil + } return err } - connectResponse := message.(*api.ConnectResponse) - if connectResponse.InvalidPassword { + authResponse, ok := message.(*api.AuthenticationResponse) + if !ok { + return fmt.Errorf("invalid response type:%T", message) + } + if authResponse.InvalidPassword { return types.ErrPassword } - return nil } @@ -144,15 +167,53 @@ func (c *Client) DeviceInfo() (*types.DeviceInfo, error) { } info := message.(*api.DeviceInfoResponse) - return &types.DeviceInfo{ - UsesPassword: info.UsesPassword, - Name: info.Name, - MacAddress: info.MacAddress, - EsphomeVersion: info.EsphomeVersion, - CompilationTime: info.CompilationTime, - Model: info.Model, - HasDeepSleep: info.HasDeepSleep, - }, nil + di := &types.DeviceInfo{ + UsesPassword: info.UsesPassword, + Name: info.Name, + MacAddress: info.MacAddress, + EsphomeVersion: info.EsphomeVersion, + CompilationTime: info.CompilationTime, + Model: info.Model, + HasDeepSleep: info.HasDeepSleep, + ProjectName: info.ProjectName, + ProjectVersion: info.ProjectVersion, + WebserverPort: info.WebserverPort, + Manufacturer: info.Manufacturer, + FriendlyName: info.FriendlyName, + SuggestedArea: info.SuggestedArea, + BluetoothMacAddress: info.BluetoothMacAddress, + BluetoothProxyFeatureFlags: info.BluetoothProxyFeatureFlags, + VoiceAssistantFeatureFlags: info.VoiceAssistantFeatureFlags, + ApiEncryptionSupported: info.ApiEncryptionSupported, + ApiEncryptionProvisionable: info.ApiEncryptionProvisionable, + ZwaveProxyFeatureFlags: info.ZwaveProxyFeatureFlags, + ZwaveHomeId: info.ZwaveHomeId, + } + + if area := info.GetArea(); area != nil { + di.Area = &types.AreaInfo{ + AreaID: area.AreaId, + Name: area.Name, + } + } + for _, a := range info.GetAreas() { + di.Areas = append(di.Areas, types.AreaInfo{AreaID: a.AreaId, Name: a.Name}) + } + for _, d := range info.GetDevices() { + di.Devices = append(di.Devices, types.SubDeviceInfo{ + DeviceID: d.DeviceId, + Name: d.Name, + AreaID: d.AreaId, + }) + } + for _, sp := range info.GetSerialProxies() { + di.SerialProxies = append(di.SerialProxies, types.SerialProxyInfo{ + Name: sp.Name, + PortType: int32(sp.PortType), + }) + } + + return di, nil } // SubscribeLogs func @@ -171,6 +232,20 @@ func (c *Client) ListEntities() error { return c.Send(&api.ListEntitiesRequest{}) } +func (c *Client) NoiseEncryptionSetKey(key []byte) (*api.NoiseEncryptionSetKeyResponse, error) { + message, err := c.SendAndWaitForResponse(&api.NoiseEncryptionSetKeyRequest{ + Key: key, + }, api.NoiseEncryptionSetKeyResponseTypeID) + if err != nil { + return nil, err + } + resp, ok := message.(*api.NoiseEncryptionSetKeyResponse) + if !ok { + return nil, fmt.Errorf("invalid response type:%T", message) + } + return resp, nil +} + // messageReader reads message from the node func (c *Client) messageReader() { defer c.conn.Close() @@ -191,8 +266,12 @@ func (c *Client) getMessage() error { var message proto.Message message, err := c.apiConn.Read(c.reader) if err == nil { + // ignore empty messages (can happen during encryption handshake) + if message == nil { + return nil + } c.lastMessageAt = time.Now() - // check waiting map + c.waitMapMutex.Lock() in, found := c.waitMap[api.TypeID(message)] c.waitMapMutex.Unlock() @@ -200,76 +279,91 @@ func (c *Client) getMessage() error { in <- message } - // forward to other parties if c.handleInternal(message) { return nil - } else if c.isExternal(message) { - if c.callBackFunc != nil { - c.callBackFunc(message) - return nil - } + } + if c.isExternal(message) && c.callBackFunc != nil { + c.callBackFunc(message) } } return err } +// isExternal is true when the message should be passed to callBackFunc. func (c *Client) isExternal(message proto.Message) bool { switch message.(type) { case - *api.PingResponse, *api.HelloResponse, - *api.ConnectResponse, + *api.AuthenticationResponse, + *api.DisconnectResponse, + *api.PingResponse, *api.DeviceInfoResponse, - *api.DisconnectResponse: + *api.NoiseEncryptionSetKeyResponse: return false } return true } +// handleInternal replies to device protocol requests (ping, disconnect, get time). func (c *Client) handleInternal(message proto.Message) bool { - switch message.(type) { + switch msg := message.(type) { case *api.DisconnectRequest: + c.DisconnectReason = msg.Reason _ = c.Send(&api.DisconnectResponse{}) - c.Close() + c.requestStop() return true case *api.PingRequest: _ = c.Send(&api.PingResponse{}) return true - case *api.HelloRequest: - _ = c.Send(&api.HelloResponse{}) - return true - - case *api.ConnectRequest: - _ = c.Send(&api.ConnectResponse{}) + case *api.GetTimeRequest: + _ = c.Send(&api.GetTimeResponse{ + EpochSeconds: uint32(time.Now().Unix()), + Timezone: localTimezoneName(), + }) return true - } return false } +func localTimezoneName() string { + if tz := os.Getenv("TZ"); tz != "" { + return tz + } + if time.Local != nil { + if name := time.Local.String(); name != "" && name != "Local" { + return name + } + } + _, offset := time.Now().Zone() + sign := "+" + if offset < 0 { + sign = "-" + offset = -offset + } + return fmt.Sprintf("UTC%s%02d:%02d", sign, offset/3600, (offset%3600)/60) +} + func (c *Client) Send(message proto.Message) error { return c.apiConn.Write(message) } func (c *Client) SendAndWaitForResponse(message proto.Message, messageType uint64) (proto.Message, error) { - if err := c.Send(message); err != nil { - return nil, err - } - return c.waitForMessage(messageType) -} - -func (c *Client) waitForMessage(messageType uint64) (proto.Message, error) { + // Register waiter before Send to avoid missing a fast response. in := make(chan proto.Message, 1) c.waitFor(messageType, in) defer c.waitDone(messageType) + if err := c.Send(message); err != nil { + return nil, err + } + select { - case message := <-in: - return message, nil + case msg := <-in: + return msg, nil case <-time.After(c.CommunicationTimeout): return nil, types.ErrCommunicationTimeout } diff --git a/pkg/types/types.go b/pkg/types/types.go index 2bdd7f6..9b09082 100644 --- a/pkg/types/types.go +++ b/pkg/types/types.go @@ -18,20 +18,53 @@ var ( // call back function used to report received messages type CallBackFunc func(proto.Message) +type AreaInfo struct { + AreaID uint32 + Name string +} + +type SubDeviceInfo struct { + DeviceID uint32 + Name string + AreaID uint32 +} + +type SerialProxyInfo struct { + Name string + PortType int32 +} + // DeviceInfo struct type DeviceInfo struct { - Name string - Model string - MacAddress string - EsphomeVersion string - CompilationTime string - UsesPassword bool - HasDeepSleep bool + Name string + Model string + MacAddress string + EsphomeVersion string + CompilationTime string + UsesPassword bool // removed in ESPHome 2026.1.0 + HasDeepSleep bool + ProjectName string + ProjectVersion string + WebserverPort uint32 + Manufacturer string + FriendlyName string + SuggestedArea string + BluetoothMacAddress string + BluetoothProxyFeatureFlags uint32 + VoiceAssistantFeatureFlags uint32 + ApiEncryptionSupported bool + ApiEncryptionProvisionable bool + ZwaveProxyFeatureFlags uint32 + ZwaveHomeId uint32 + Area *AreaInfo + Areas []AreaInfo + Devices []SubDeviceInfo + SerialProxies []SerialProxyInfo } func (di *DeviceInfo) String() string { - return fmt.Sprintf("{name: %v, model:%v, mac_address:%v, esphome_version:%v, compilation_time:%v, uses_password:%v, has_deep_sleep:%v}", - di.Name, di.Model, di.MacAddress, di.EsphomeVersion, di.CompilationTime, di.UsesPassword, di.HasDeepSleep) + return fmt.Sprintf("{name: %v, friendly_name: %v, model:%v, manufacturer:%v, mac_address:%v, esphome_version:%v, compilation_time:%v, uses_password:%v, has_deep_sleep:%v, project:%v/%v, webserver_port:%v, suggested_area:%v, bt_mac:%v, api_encryption_supported:%v}", + di.Name, di.FriendlyName, di.Model, di.Manufacturer, di.MacAddress, di.EsphomeVersion, di.CompilationTime, di.UsesPassword, di.HasDeepSleep, di.ProjectName, di.ProjectVersion, di.WebserverPort, di.SuggestedArea, di.BluetoothMacAddress, di.ApiEncryptionSupported) } // LogLevel type @@ -53,7 +86,7 @@ type LogEntry struct { Level LogLevel Tag string Message string - SendFailed bool + SendFailed bool // always false; field removed from API } func (le *LogEntry) String() string { @@ -67,9 +100,8 @@ func GetLogEntry(msg proto.Message) (*LogEntry, error) { return nil, fmt.Errorf("received invalid data type:%T", msg) } log := LogEntry{ - Level: LogLevel(entry.Level), - Message: entry.Message, - SendFailed: entry.SendFailed, + Level: LogLevel(entry.Level), + Message: string(entry.Message), } return &log, nil } diff --git a/proto/README.md b/proto/README.md index 9a8eda3..8dcc0bd 100644 --- a/proto/README.md +++ b/proto/README.md @@ -1,13 +1,21 @@ Proto files are copied from the [esphome GitHub repository](https://github.com/esphome/esphome) +release [**2026.7.0**](https://github.com/esphome/esphome/releases/tag/2026.7.0): -* [api.proto](https://github.com/esphome/esphome/blob/dev/esphome/components/api/api.proto) -* [api_options.proto](https://github.com/esphome/esphome/blob/dev/esphome/components/api/api_options.proto) +* [api.proto](https://github.com/esphome/esphome/blob/2026.7.0/esphome/components/api/api.proto) +* [api_options.proto](https://github.com/esphome/esphome/blob/2026.7.0/esphome/components/api/api_options.proto) ### Steps to update the generated file * Install [protoc](https://github.com/protocolbuffers/protobuf) -* `google/protobuf/descriptor.proto` should be on the import path -* Execute the following script +* Install `protoc-gen-go`: `go install google.golang.org/protobuf/cmd/protoc-gen-go@latest` +* `google/protobuf/descriptor.proto` should be on the import path (set `PROTOC_INCLUDE` if needed) +* Refresh protos from an ESPHome release tag if desired, then: ```bash -cd proto +ESPHOME_TAG=2026.7.0 +curl -sL "https://raw.githubusercontent.com/esphome/esphome/${ESPHOME_TAG}/esphome/components/api/api.proto" \ + -o api.proto +curl -sL "https://raw.githubusercontent.com/esphome/esphome/${ESPHOME_TAG}/esphome/components/api/api_options.proto" \ + -o api_options.proto ./generate.sh -``` \ No newline at end of file +``` +* Update `pkg/api/helper.go` type-id maps when message IDs change +* Document changes in `docs/API_PROTO_UPDATE__to_.md` (ESPHome release versions) and `CHANGELOG.md` diff --git a/proto/api.proto b/proto/api.proto index 03e0832..4b3df62 100644 --- a/proto/api.proto +++ b/proto/api.proto @@ -7,10 +7,7 @@ service APIConnection { option (needs_setup_connection) = false; option (needs_authentication) = false; } - rpc connect (ConnectRequest) returns (ConnectResponse) { - option (needs_setup_connection) = false; - option (needs_authentication) = false; - } + // REMOVED in ESPHome 2026.1.0: rpc authenticate (AuthenticationRequest) returns (AuthenticationResponse) rpc disconnect (DisconnectRequest) returns (DisconnectResponse) { option (needs_setup_connection) = false; option (needs_authentication) = false; @@ -27,27 +24,28 @@ service APIConnection { rpc subscribe_logs (SubscribeLogsRequest) returns (void) {} rpc subscribe_homeassistant_services (SubscribeHomeassistantServicesRequest) returns (void) {} rpc subscribe_home_assistant_states (SubscribeHomeAssistantStatesRequest) returns (void) {} - rpc get_time (GetTimeRequest) returns (GetTimeResponse) { - option (needs_authentication) = false; - } rpc execute_service (ExecuteServiceRequest) returns (void) {} + rpc noise_encryption_set_key (NoiseEncryptionSetKeyRequest) returns (NoiseEncryptionSetKeyResponse) {} + rpc button_command (ButtonCommandRequest) returns (void) {} + rpc camera_image (CameraImageRequest) returns (void) {} + rpc climate_command (ClimateCommandRequest) returns (void) {} rpc cover_command (CoverCommandRequest) returns (void) {} + rpc date_command (DateCommandRequest) returns (void) {} + rpc datetime_command (DateTimeCommandRequest) returns (void) {} rpc fan_command (FanCommandRequest) returns (void) {} rpc light_command (LightCommandRequest) returns (void) {} - rpc switch_command (SwitchCommandRequest) returns (void) {} - rpc camera_image (CameraImageRequest) returns (void) {} - rpc climate_command (ClimateCommandRequest) returns (void) {} - rpc number_command (NumberCommandRequest) returns (void) {} - rpc text_command (TextCommandRequest) returns (void) {} - rpc select_command (SelectCommandRequest) returns (void) {} - rpc button_command (ButtonCommandRequest) returns (void) {} rpc lock_command (LockCommandRequest) returns (void) {} - rpc valve_command (ValveCommandRequest) returns (void) {} rpc media_player_command (MediaPlayerCommandRequest) returns (void) {} - rpc date_command (DateCommandRequest) returns (void) {} + rpc number_command (NumberCommandRequest) returns (void) {} + rpc select_command (SelectCommandRequest) returns (void) {} + rpc siren_command (SirenCommandRequest) returns (void) {} + rpc switch_command (SwitchCommandRequest) returns (void) {} + rpc text_command (TextCommandRequest) returns (void) {} rpc time_command (TimeCommandRequest) returns (void) {} - rpc datetime_command (DateTimeCommandRequest) returns (void) {} + rpc update_command (UpdateCommandRequest) returns (void) {} + rpc valve_command (ValveCommandRequest) returns (void) {} + rpc water_heater_command (WaterHeaterCommandRequest) returns (void) {} rpc subscribe_bluetooth_le_advertisements(SubscribeBluetoothLEAdvertisementsRequest) returns (void) {} rpc bluetooth_device_request(BluetoothDeviceRequest) returns (void) {} @@ -59,10 +57,25 @@ service APIConnection { rpc bluetooth_gatt_notify(BluetoothGATTNotifyRequest) returns (void) {} rpc subscribe_bluetooth_connections_free(SubscribeBluetoothConnectionsFreeRequest) returns (BluetoothConnectionsFreeResponse) {} rpc unsubscribe_bluetooth_le_advertisements(UnsubscribeBluetoothLEAdvertisementsRequest) returns (void) {} + rpc bluetooth_scanner_set_mode(BluetoothScannerSetModeRequest) returns (void) {} + rpc bluetooth_set_connection_params(BluetoothSetConnectionParamsRequest) returns (BluetoothSetConnectionParamsResponse) {} rpc subscribe_voice_assistant(SubscribeVoiceAssistantRequest) returns (void) {} + rpc voice_assistant_get_configuration(VoiceAssistantConfigurationRequest) returns (VoiceAssistantConfigurationResponse) {} + rpc voice_assistant_set_configuration(VoiceAssistantSetConfiguration) returns (void) {} rpc alarm_control_panel_command (AlarmControlPanelCommandRequest) returns (void) {} + + rpc zwave_proxy_frame(ZWaveProxyFrame) returns (void) {} + rpc zwave_proxy_request(ZWaveProxyRequest) returns (void) {} + + rpc infrared_rf_transmit_raw_timings(InfraredRFTransmitRawTimingsRequest) returns (void) {} + + rpc serial_proxy_configure(SerialProxyConfigureRequest) returns (void) {} + rpc serial_proxy_write(SerialProxyWriteRequest) returns (void) {} + rpc serial_proxy_set_modem_pins(SerialProxySetModemPinsRequest) returns (void) {} + rpc serial_proxy_get_modem_pins(SerialProxyGetModemPinsRequest) returns (void) {} + rpc serial_proxy_request(SerialProxyRequest) returns (void) {} } @@ -76,14 +89,13 @@ service APIConnection { // * VarInt denoting the type of message. // * The message object encoded as a ProtoBuf message -// The connection is established in 4 steps: +// The connection is established in 2 steps: // * First, the client connects to the server and sends a "Hello Request" identifying itself -// * The server responds with a "Hello Response" and selects the protocol version -// * After receiving this message, the client attempts to authenticate itself using -// the password and a "Connect Request" -// * The server responds with a "Connect Response" and notifies of invalid password. +// * The server responds with a "Hello Response" and the connection is authenticated // If anything in this initial process fails, the connection must immediately closed // by both sides and _no_ disconnection message is to be sent. +// Note: Password authentication via AuthenticationRequest/AuthenticationResponse (message IDs 3, 4) +// was removed in ESPHome 2026.1.0. Those message IDs are reserved and should not be reused. // Message sent at the beginning of each connection // Can only be sent by the client and only at the beginning of the connection @@ -117,34 +129,45 @@ message HelloResponse { // A string identifying the server (ESP); like client info this may be empty // and only exists for debugging/logging purposes. - // For example "ESPHome v1.10.0 on ESP8266" - string server_info = 3; + // Currently set to ESPHOME_VERSION string literal. + string server_info = 3 [(max_data_length) = 32, (force) = true]; - // The name of the server (App.get_name()) - string name = 4; + // The name of the server (App.get_name() - device hostname) + // max_data_length matches ESPHOME_DEVICE_NAME_MAX_LEN (validated by validate_hostname) + string name = 4 [(max_data_length) = 31, (force) = true]; } -// Message sent at the beginning of each connection to authenticate the client -// Can only be sent by the client and only at the beginning of the connection -message ConnectRequest { +// DEPRECATED in ESPHome 2026.1.0 - Password authentication is no longer supported. +// These messages are kept for protocol documentation but are not processed by the server. +// Use noise encryption instead: https://esphome.io/components/api/#configuration-variables +message AuthenticationRequest { option (id) = 3; option (source) = SOURCE_CLIENT; option (no_delay) = true; + option deprecated = true; - // The password to log in with string password = 1; } -// Confirmation of successful connection. After this the connection is available for all traffic. -// Can only be sent by the server and only at the beginning of the connection -message ConnectResponse { +message AuthenticationResponse { option (id) = 4; option (source) = SOURCE_SERVER; option (no_delay) = true; + option deprecated = true; bool invalid_password = 1; } +// Reason a party is requesting the connection be closed. +enum DisconnectReason { + // No specific reason / not provided (default for older peers). + DISCONNECT_REASON_UNSPECIFIED = 0; + // The device's provisioning window has expired. The device must be reset + // (power-cycled) to reopen the provisioning window before it will accept a + // connection again. + DISCONNECT_REASON_PROVISIONING_CLOSED = 1; +} + // Request to close the connection. // Can be sent by both the client and server message DisconnectRequest { @@ -153,6 +176,10 @@ message DisconnectRequest { option (no_delay) = true; // Do not close the connection before the acknowledgement arrives + + // Optional reason the connection is being closed. Older peers that do not + // send this field will report DISCONNECT_REASON_UNSPECIFIED (0). + DisconnectReason reason = 1; } message DisconnectResponse { @@ -182,48 +209,112 @@ message DeviceInfoRequest { // Empty } +message AreaInfo { + uint32 area_id = 1; + // max_data_length matches core/config.FRIENDLY_NAME_MAX_LEN via AREA_SCHEMA + string name = 2 [(max_data_length) = 120, (force) = true]; +} + +message DeviceInfo { + uint32 device_id = 1; + // max_data_length matches core/config.FRIENDLY_NAME_MAX_LEN via DEVICE_SCHEMA + string name = 2 [(max_data_length) = 120, (force) = true]; + uint32 area_id = 3; +} + +enum SerialProxyPortType { + SERIAL_PROXY_PORT_TYPE_TTL = 0; + SERIAL_PROXY_PORT_TYPE_RS232 = 1; + SERIAL_PROXY_PORT_TYPE_RS485 = 2; +} + +message SerialProxyInfo { + string name = 1; // Human-readable port name + SerialProxyPortType port_type = 2; // Port type (RS232, RS485) +} + +// DeviceInfoResponse max_data_length values: +// name = 31 (ESPHOME_DEVICE_NAME_MAX_LEN, validated by validate_hostname) +// friendly_name = 120 (core/config.FRIENDLY_NAME_MAX_LEN) +// mac_address/bluetooth_mac_address = 17 (MAC_ADDRESS_PRETTY_BUFFER_SIZE - 1, constexpr) +// esphome_version = 32 (ESPHOME_VERSION string literal) +// compilation_time = 25 (Application::BUILD_TIME_STR_SIZE - 1, constexpr) +// manufacturer = 20 (longest hardcoded literal: "Nordic Semiconductor") +// model = 127 (core/config.BOARD_MAX_LENGTH, validated in platform schemas) +// project_name/project_version = 127 (core/config.PROJECT_MAX_LENGTH) +// suggested_area = 120 (core/config.FRIENDLY_NAME_MAX_LEN via AREA_SCHEMA) message DeviceInfoResponse { option (id) = 10; option (source) = SOURCE_SERVER; - bool uses_password = 1; + // Deprecated in ESPHome 2026.1.0, but kept for backward compatibility + // with older ESPHome versions that still send this field. + bool uses_password = 1 [deprecated = true]; - // The name of the node, given by "App.set_name()" - string name = 2; + // The name of the node, given by "App.set_name()" - device hostname + string name = 2 [(max_data_length) = 31, (force) = true]; // The mac address of the device. For example "AC:BC:32:89:0E:A9" - string mac_address = 3; + string mac_address = 3 [(max_data_length) = 17, (force) = true]; // A string describing the ESPHome version. For example "1.10.0" - string esphome_version = 4; + string esphome_version = 4 [(max_data_length) = 32, (force) = true]; // A string describing the date of compilation, this is generated by the compiler // and therefore may not be in the same format all the time. // If the user isn't using ESPHome, this will also not be set. - string compilation_time = 5; + string compilation_time = 5 [(max_data_length) = 25, (force) = true]; // The model of the board. For example NodeMCU - string model = 6; + // max_data_length matches core/config.BOARD_MAX_LENGTH (validated in platform schemas) + string model = 6 [(max_data_length) = 127, (force) = true]; - bool has_deep_sleep = 7; + bool has_deep_sleep = 7 [(field_ifdef) = "USE_DEEP_SLEEP"]; // The esphome project details if set - string project_name = 8; - string project_version = 9; + // max_data_length matches core/config.PROJECT_MAX_LENGTH + string project_name = 8 [(max_data_length) = 127, (force) = true, (field_ifdef) = "ESPHOME_PROJECT_NAME"]; + string project_version = 9 [(max_data_length) = 127, (force) = true, (field_ifdef) = "ESPHOME_PROJECT_NAME"]; + + uint32 webserver_port = 10 [(field_ifdef) = "USE_WEBSERVER"]; + + // Deprecated in API version 1.9 + uint32 legacy_bluetooth_proxy_version = 11 [deprecated=true, (field_ifdef) = "USE_BLUETOOTH_PROXY"]; + uint32 bluetooth_proxy_feature_flags = 15 [(field_ifdef) = "USE_BLUETOOTH_PROXY"]; + + string manufacturer = 12 [(max_data_length) = 20, (force) = true]; + + string friendly_name = 13 [(max_data_length) = 120, (force) = true]; + + // Deprecated in API version 1.10 + uint32 legacy_voice_assistant_version = 14 [deprecated=true, (field_ifdef) = "USE_VOICE_ASSISTANT"]; + uint32 voice_assistant_feature_flags = 17 [(field_ifdef) = "USE_VOICE_ASSISTANT"]; + + string suggested_area = 16 [(max_data_length) = 120, (force) = true, (field_ifdef) = "USE_AREAS"]; + + // The Bluetooth mac address of the device. For example "AC:BC:32:89:0E:AA" + string bluetooth_mac_address = 18 [(max_data_length) = 17, (force) = true, (field_ifdef) = "USE_BLUETOOTH_PROXY"]; - uint32 webserver_port = 10; + // Supports receiving and saving api encryption key + bool api_encryption_supported = 19 [(field_ifdef) = "USE_API_NOISE"]; - uint32 legacy_bluetooth_proxy_version = 11; - uint32 bluetooth_proxy_feature_flags = 15; + repeated DeviceInfo devices = 20 [(field_ifdef) = "USE_DEVICES", (fixed_array_size_define) = "ESPHOME_DEVICE_COUNT"]; + repeated AreaInfo areas = 21 [(field_ifdef) = "USE_AREAS", (fixed_array_size_define) = "ESPHOME_AREA_COUNT"]; - string manufacturer = 12; + // Top-level area info to phase out suggested_area + AreaInfo area = 22 [(field_ifdef) = "USE_AREAS"]; - string friendly_name = 13; + // Indicates if Z-Wave proxy support is available and features supported + uint32 zwave_proxy_feature_flags = 23 [(field_ifdef) = "USE_ZWAVE_PROXY"]; + uint32 zwave_home_id = 24 [(field_ifdef) = "USE_ZWAVE_PROXY"]; - uint32 legacy_voice_assistant_version = 14; - uint32 voice_assistant_feature_flags = 17; + // Serial proxy instance metadata + repeated SerialProxyInfo serial_proxies = 25 [(field_ifdef) = "USE_SERIAL_PROXY", (fixed_array_size_define) = "SERIAL_PROXY_COUNT"]; - string suggested_area = 16; + // Device is unprovisioned and accepts Noise handshakes with the well-known + // all-zeros PSK, so the api encryption key can be provisioned without being + // sent in plaintext (protects against passive sniffing, not active MITM) + bool api_encryption_provisionable = 26 [(field_ifdef) = "USE_API_NOISE"]; } message ListEntitiesRequest { @@ -251,58 +342,72 @@ enum EntityCategory { ENTITY_CATEGORY_DIAGNOSTIC = 2; } +// Entity field max_data_length values match Python validation constants: +// name/object_id = 120 (config_validation.NAME_MAX_LENGTH) +// icon = 63 (core/config.ICON_MAX_LENGTH) +// device_class = 47 (core/config.DEVICE_CLASS_MAX_LENGTH) +// unit_of_measurement = 63 (core/config.UNIT_OF_MEASUREMENT_MAX_LENGTH) + // ==================== BINARY SENSOR ==================== message ListEntitiesBinarySensorResponse { option (id) = 12; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_BINARY_SENSOR"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string device_class = 5; + string device_class = 5 [(max_data_length) = 47]; bool is_status_binary_sensor = 6; bool disabled_by_default = 7; - string icon = 8; + string icon = 8 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; EntityCategory entity_category = 9; + uint32 device_id = 10 [(field_ifdef) = "USE_DEVICES"]; } message BinarySensorStateResponse { option (id) = 21; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_BINARY_SENSOR"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; bool state = 2; // If the binary sensor does not have a valid state yet. // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller bool missing_state = 3; + uint32 device_id = 4 [(field_ifdef) = "USE_DEVICES"]; } // ==================== COVER ==================== message ListEntitiesCoverResponse { option (id) = 13; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_COVER"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id bool assumed_state = 5; bool supports_position = 6; bool supports_tilt = 7; - string device_class = 8; + string device_class = 8 [(max_data_length) = 47]; bool disabled_by_default = 9; - string icon = 10; + string icon = 10 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; EntityCategory entity_category = 11; bool supports_stop = 12; + uint32 device_id = 13 [(field_ifdef) = "USE_DEVICES"]; } +// Deprecated in API version 1.1 enum LegacyCoverState { + option deprecated = true; LEGACY_COVER_STATE_OPEN = 0; LEGACY_COVER_STATE_CLOSED = 1; } @@ -313,21 +418,26 @@ enum CoverOperation { } message CoverStateResponse { option (id) = 22; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_COVER"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; // legacy: state has been removed in 1.13 // clients/servers must still send/accept it until the next protocol change - LegacyCoverState legacy_state = 2; + // Deprecated in API version 1.1 + LegacyCoverState legacy_state = 2 [deprecated=true]; float position = 3; float tilt = 4; CoverOperation current_operation = 5; + uint32 device_id = 6 [(field_ifdef) = "USE_DEVICES"]; } +// Deprecated in API version 1.1 enum LegacyCoverCommand { + option deprecated = true; LEGACY_COVER_COMMAND_OPEN = 0; LEGACY_COVER_COMMAND_CLOSE = 1; LEGACY_COVER_COMMAND_STOP = 2; @@ -337,42 +447,50 @@ message CoverCommandRequest { option (source) = SOURCE_CLIENT; option (ifdef) = "USE_COVER"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; // legacy: command has been removed in 1.13 // clients/servers must still send/accept it until the next protocol change - bool has_legacy_command = 2; - LegacyCoverCommand legacy_command = 3; + // Deprecated in API version 1.1 + bool has_legacy_command = 2 [deprecated=true]; + // Deprecated in API version 1.1 + LegacyCoverCommand legacy_command = 3 [deprecated=true]; bool has_position = 4; float position = 5; bool has_tilt = 6; float tilt = 7; bool stop = 8; + uint32 device_id = 9 [(field_ifdef) = "USE_DEVICES"]; } // ==================== FAN ==================== message ListEntitiesFanResponse { option (id) = 14; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_FAN"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id bool supports_oscillation = 5; bool supports_speed = 6; bool supports_direction = 7; int32 supported_speed_count = 8; bool disabled_by_default = 9; - string icon = 10; + string icon = 10 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; EntityCategory entity_category = 11; - repeated string supported_preset_modes = 12; + repeated string supported_preset_modes = 12 [(container_pointer_no_template) = "std::vector"]; + uint32 device_id = 13 [(field_ifdef) = "USE_DEVICES"]; } +// Deprecated in API version 1.6 - only used in deprecated fields enum FanSpeed { + option deprecated = true; FAN_SPEED_LOW = 0; FAN_SPEED_MEDIUM = 1; FAN_SPEED_HIGH = 2; @@ -383,29 +501,35 @@ enum FanDirection { } message FanStateResponse { option (id) = 23; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_FAN"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; bool state = 2; bool oscillating = 3; - FanSpeed speed = 4 [deprecated = true]; + // Deprecated in API version 1.6 + FanSpeed speed = 4 [deprecated=true]; FanDirection direction = 5; int32 speed_level = 6; string preset_mode = 7; + uint32 device_id = 8 [(field_ifdef) = "USE_DEVICES"]; } message FanCommandRequest { option (id) = 31; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_FAN"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; bool has_state = 2; bool state = 3; - bool has_speed = 4 [deprecated = true]; - FanSpeed speed = 5 [deprecated = true]; + // Deprecated in API version 1.6 + bool has_speed = 4 [deprecated=true]; + // Deprecated in API version 1.6 + FanSpeed speed = 5 [deprecated=true]; bool has_oscillating = 6; bool oscillating = 7; bool has_direction = 8; @@ -414,13 +538,15 @@ message FanCommandRequest { int32 speed_level = 11; bool has_preset_mode = 12; string preset_mode = 13; + uint32 device_id = 14 [(field_ifdef) = "USE_DEVICES"]; } // ==================== LIGHT ==================== enum ColorMode { COLOR_MODE_UNKNOWN = 0; COLOR_MODE_ON_OFF = 1; - COLOR_MODE_BRIGHTNESS = 2; + COLOR_MODE_LEGACY_BRIGHTNESS = 2; + COLOR_MODE_BRIGHTNESS = 3; COLOR_MODE_WHITE = 7; COLOR_MODE_COLOR_TEMPERATURE = 11; COLOR_MODE_COLD_WARM_WHITE = 19; @@ -431,34 +557,41 @@ enum ColorMode { } message ListEntitiesLightResponse { option (id) = 15; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_LIGHT"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - repeated ColorMode supported_color_modes = 12; + repeated ColorMode supported_color_modes = 12 [(container_pointer_no_template) = "light::ColorModeMask"]; // next four supports_* are for legacy clients, newer clients should use color modes + // Deprecated in API version 1.6 bool legacy_supports_brightness = 5 [deprecated=true]; + // Deprecated in API version 1.6 bool legacy_supports_rgb = 6 [deprecated=true]; + // Deprecated in API version 1.6 bool legacy_supports_white_value = 7 [deprecated=true]; + // Deprecated in API version 1.6 bool legacy_supports_color_temperature = 8 [deprecated=true]; float min_mireds = 9; float max_mireds = 10; - repeated string effects = 11; + repeated string effects = 11 [(container_pointer_no_template) = "FixedVector"]; bool disabled_by_default = 13; - string icon = 14; + string icon = 14 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; EntityCategory entity_category = 15; + uint32 device_id = 16 [(field_ifdef) = "USE_DEVICES"]; } message LightStateResponse { option (id) = 24; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_LIGHT"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; bool state = 2; float brightness = 3; ColorMode color_mode = 11; @@ -471,14 +604,16 @@ message LightStateResponse { float cold_white = 12; float warm_white = 13; string effect = 9; + uint32 device_id = 14 [(field_ifdef) = "USE_DEVICES"]; } message LightCommandRequest { option (id) = 32; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_LIGHT"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; bool has_state = 2; bool state = 3; bool has_brightness = 4; @@ -505,6 +640,7 @@ message LightCommandRequest { uint32 flash_length = 17; bool has_effect = 18; string effect = 19; + uint32 device_id = 28 [(field_ifdef) = "USE_DEVICES"]; } // ==================== SENSOR ==================== @@ -513,9 +649,12 @@ enum SensorStateClass { STATE_CLASS_MEASUREMENT = 1; STATE_CLASS_TOTAL_INCREASING = 2; STATE_CLASS_TOTAL = 3; + STATE_CLASS_MEASUREMENT_ANGLE = 4; } +// Deprecated in API version 1.5 enum SensorLastResetType { + option deprecated = true; LAST_RESET_NONE = 0; LAST_RESET_NEVER = 1; LAST_RESET_AUTO = 2; @@ -523,101 +662,117 @@ enum SensorLastResetType { message ListEntitiesSensorResponse { option (id) = 16; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_SENSOR"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; - string unit_of_measurement = 6; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; + string unit_of_measurement = 6 [(max_data_length) = 63]; int32 accuracy_decimals = 7; bool force_update = 8; - string device_class = 9; + string device_class = 9 [(max_data_length) = 47]; SensorStateClass state_class = 10; // Last reset type removed in 2021.9.0 - SensorLastResetType legacy_last_reset_type = 11; + // Deprecated in API version 1.5 + SensorLastResetType legacy_last_reset_type = 11 [deprecated=true]; bool disabled_by_default = 12; EntityCategory entity_category = 13; + uint32 device_id = 14 [(field_ifdef) = "USE_DEVICES"]; } message SensorStateResponse { option (id) = 25; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_SENSOR"; option (no_delay) = true; + option (speed_optimized) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; float state = 2; // If the sensor does not have a valid state yet. // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller bool missing_state = 3; + uint32 device_id = 4 [(field_ifdef) = "USE_DEVICES"]; } // ==================== SWITCH ==================== message ListEntitiesSwitchResponse { option (id) = 17; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_SWITCH"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; bool assumed_state = 6; bool disabled_by_default = 7; EntityCategory entity_category = 8; - string device_class = 9; + string device_class = 9 [(max_data_length) = 47]; + uint32 device_id = 10 [(field_ifdef) = "USE_DEVICES"]; } message SwitchStateResponse { option (id) = 26; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_SWITCH"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; bool state = 2; + uint32 device_id = 3 [(field_ifdef) = "USE_DEVICES"]; } message SwitchCommandRequest { option (id) = 33; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_SWITCH"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; bool state = 2; + uint32 device_id = 3 [(field_ifdef) = "USE_DEVICES"]; } // ==================== TEXT SENSOR ==================== message ListEntitiesTextSensorResponse { option (id) = 18; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_TEXT_SENSOR"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; bool disabled_by_default = 6; EntityCategory entity_category = 7; - string device_class = 8; + string device_class = 8 [(max_data_length) = 47]; + uint32 device_id = 9 [(field_ifdef) = "USE_DEVICES"]; } message TextSensorStateResponse { option (id) = 27; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_TEXT_SENSOR"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; string state = 2; // If the text sensor does not have a valid state yet. // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller bool missing_state = 3; + uint32 device_id = 4 [(field_ifdef) = "USE_DEVICES"]; } // ==================== SUBSCRIBE LOGS ==================== @@ -642,16 +797,34 @@ message SubscribeLogsResponse { option (source) = SOURCE_SERVER; option (log) = false; option (no_delay) = false; + option (speed_optimized) = true; - LogLevel level = 1; - string message = 3; - bool send_failed = 4; + LogLevel level = 1 [(force) = true]; + bytes message = 3 [(force) = true]; +} + +// ==================== NOISE ENCRYPTION ==================== +message NoiseEncryptionSetKeyRequest { + option (id) = 124; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_API_NOISE"; + + bytes key = 1; +} + +message NoiseEncryptionSetKeyResponse { + option (id) = 125; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_API_NOISE"; + + bool success = 1; } // ==================== HOMEASSISTANT.SERVICE ==================== message SubscribeHomeassistantServicesRequest { option (id) = 34; option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_API_HOMEASSISTANT_SERVICES"; } message HomeassistantServiceMap { @@ -659,16 +832,33 @@ message HomeassistantServiceMap { string value = 2; } -message HomeassistantServiceResponse { +message HomeassistantActionRequest { option (id) = 35; option (source) = SOURCE_SERVER; option (no_delay) = true; + option (ifdef) = "USE_API_HOMEASSISTANT_SERVICES"; string service = 1; - repeated HomeassistantServiceMap data = 2; - repeated HomeassistantServiceMap data_template = 3; - repeated HomeassistantServiceMap variables = 4; + repeated HomeassistantServiceMap data = 2 [(fixed_vector) = true]; + repeated HomeassistantServiceMap data_template = 3 [(fixed_vector) = true]; + repeated HomeassistantServiceMap variables = 4 [(fixed_vector) = true]; bool is_event = 5; + uint32 call_id = 6 [(field_ifdef) = "USE_API_HOMEASSISTANT_ACTION_RESPONSES"]; + bool wants_response = 7 [(field_ifdef) = "USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON"]; + string response_template = 8 [(field_ifdef) = "USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON"]; +} + +// Message sent by Home Assistant to ESPHome with service call response data +message HomeassistantActionResponse { + option (id) = 130; + option (source) = SOURCE_CLIENT; + option (no_delay) = true; + option (ifdef) = "USE_API_HOMEASSISTANT_ACTION_RESPONSES"; + + uint32 call_id = 1; // Matches the call_id from HomeassistantActionRequest + bool success = 2; // Whether the service call succeeded + string error_message = 3; // Error message if success = false + bytes response_data = 4 [(field_ifdef) = "USE_API_HOMEASSISTANT_ACTION_RESPONSES_JSON"]; } // ==================== IMPORT HOME ASSISTANT STATES ==================== @@ -678,19 +868,23 @@ message HomeassistantServiceResponse { message SubscribeHomeAssistantStatesRequest { option (id) = 38; option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_API_HOMEASSISTANT_STATES"; } message SubscribeHomeAssistantStateResponse { option (id) = 39; option (source) = SOURCE_SERVER; + option (ifdef) = "USE_API_HOMEASSISTANT_STATES"; string entity_id = 1; string attribute = 2; + bool once = 3; } message HomeAssistantStateResponse { option (id) = 40; option (source) = SOURCE_CLIENT; option (no_delay) = true; + option (ifdef) = "USE_API_HOMEASSISTANT_STATES"; string entity_id = 1; string state = 2; @@ -700,15 +894,44 @@ message HomeAssistantStateResponse { // ==================== IMPORT TIME ==================== message GetTimeRequest { option (id) = 36; - option (source) = SOURCE_BOTH; + option (source) = SOURCE_SERVER; +} + +enum DSTRuleType { + DST_RULE_TYPE_NONE = 0; + DST_RULE_TYPE_MONTH_WEEK_DAY = 1; + DST_RULE_TYPE_JULIAN_NO_LEAP = 2; + DST_RULE_TYPE_DAY_OF_YEAR = 3; +} + +message DSTRule { + option (source) = SOURCE_CLIENT; + + sint32 time_seconds = 1; + uint32 day = 2; + DSTRuleType type = 3; + uint32 month = 4; + uint32 week = 5; + uint32 day_of_week = 6; +} + +message ParsedTimezone { + option (source) = SOURCE_CLIENT; + + sint32 std_offset_seconds = 1; + sint32 dst_offset_seconds = 2; + DSTRule dst_start = 3; + DSTRule dst_end = 4; } message GetTimeResponse { option (id) = 37; - option (source) = SOURCE_BOTH; + option (source) = SOURCE_CLIENT; option (no_delay) = true; fixed32 epoch_seconds = 1; + string timezone = 2; + ParsedTimezone parsed_timezone = 3; } // ==================== USER-DEFINES SERVICES ==================== @@ -722,73 +945,112 @@ enum ServiceArgType { SERVICE_ARG_TYPE_FLOAT_ARRAY = 6; SERVICE_ARG_TYPE_STRING_ARRAY = 7; } +enum SupportsResponseType { + SUPPORTS_RESPONSE_NONE = 0; + SUPPORTS_RESPONSE_OPTIONAL = 1; + SUPPORTS_RESPONSE_ONLY = 2; + // Status-only response - reports success/error without data payload + // Value is higher to avoid conflicts with future Home Assistant values + SUPPORTS_RESPONSE_STATUS = 100; +} message ListEntitiesServicesArgument { + option (ifdef) = "USE_API_USER_DEFINED_ACTIONS"; string name = 1; ServiceArgType type = 2; } message ListEntitiesServicesResponse { option (id) = 41; option (source) = SOURCE_SERVER; + option (ifdef) = "USE_API_USER_DEFINED_ACTIONS"; string name = 1; - fixed32 key = 2; - repeated ListEntitiesServicesArgument args = 3; + fixed32 key = 2 [(force) = true]; + repeated ListEntitiesServicesArgument args = 3 [(fixed_vector) = true]; + SupportsResponseType supports_response = 4; } message ExecuteServiceArgument { + option (ifdef) = "USE_API_USER_DEFINED_ACTIONS"; bool bool_ = 1; int32 legacy_int = 2; float float_ = 3; string string_ = 4; // ESPHome 1.14 (api v1.3) make int a signed value sint32 int_ = 5; - repeated bool bool_array = 6 [packed=false]; - repeated sint32 int_array = 7 [packed=false]; - repeated float float_array = 8 [packed=false]; - repeated string string_array = 9; + repeated bool bool_array = 6 [packed=false, (fixed_vector) = true]; + repeated sint32 int_array = 7 [packed=false, (fixed_vector) = true]; + repeated float float_array = 8 [packed=false, (fixed_vector) = true]; + repeated string string_array = 9 [(fixed_vector) = true]; } message ExecuteServiceRequest { option (id) = 42; option (source) = SOURCE_CLIENT; option (no_delay) = true; + option (ifdef) = "USE_API_USER_DEFINED_ACTIONS"; - fixed32 key = 1; - repeated ExecuteServiceArgument args = 2; + fixed32 key = 1 [(force) = true]; + repeated ExecuteServiceArgument args = 2 [(fixed_vector) = true]; + uint32 call_id = 3 [(field_ifdef) = "USE_API_USER_DEFINED_ACTION_RESPONSES"]; + bool return_response = 4 [(field_ifdef) = "USE_API_USER_DEFINED_ACTION_RESPONSES"]; +} + +// Message sent by ESPHome to Home Assistant with service execution response data +message ExecuteServiceResponse { + option (id) = 131; + option (source) = SOURCE_SERVER; + option (no_delay) = true; + option (ifdef) = "USE_API_USER_DEFINED_ACTION_RESPONSES"; + + uint32 call_id = 1; // Matches the call_id from ExecuteServiceRequest + bool success = 2; // Whether the service execution succeeded + string error_message = 3; // Error message if success = false + bytes response_data = 4 [(pointer_to_buffer) = true, (field_ifdef) = "USE_API_USER_DEFINED_ACTION_RESPONSES_JSON"]; } // ==================== CAMERA ==================== message ListEntitiesCameraResponse { option (id) = 43; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; - option (ifdef) = "USE_ESP32_CAMERA"; + option (ifdef) = "USE_CAMERA"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id bool disabled_by_default = 5; - string icon = 6; + string icon = 6 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; EntityCategory entity_category = 7; + uint32 device_id = 8 [(field_ifdef) = "USE_DEVICES"]; } message CameraImageResponse { option (id) = 44; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; - option (ifdef) = "USE_ESP32_CAMERA"; + option (ifdef) = "USE_CAMERA"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; bytes data = 2; bool done = 3; + uint32 device_id = 4 [(field_ifdef) = "USE_DEVICES"]; } message CameraImageRequest { option (id) = 45; option (source) = SOURCE_CLIENT; - option (ifdef) = "USE_ESP32_CAMERA"; + option (ifdef) = "USE_CAMERA"; option (no_delay) = true; bool single = 1; bool stream = 2; } +// ==================== TEMPERATURE UNIT ==================== +enum TemperatureUnit { + TEMPERATURE_UNIT_CELSIUS = 0; + TEMPERATURE_UNIT_FAHRENHEIT = 1; + TEMPERATURE_UNIT_KELVIN = 2; +} + // ==================== CLIMATE ==================== enum ClimateMode { CLIMATE_MODE_OFF = 0; @@ -825,6 +1087,7 @@ enum ClimateAction { CLIMATE_ACTION_IDLE = 4; CLIMATE_ACTION_DRYING = 5; CLIMATE_ACTION_FAN = 6; + CLIMATE_ACTION_DEFROSTING = 7; } enum ClimatePreset { CLIMATE_PRESET_NONE = 0; @@ -838,51 +1101,59 @@ enum ClimatePreset { } message ListEntitiesClimateResponse { option (id) = 46; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_CLIMATE"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - bool supports_current_temperature = 5; - bool supports_two_point_target_temperature = 6; - repeated ClimateMode supported_modes = 7; + bool supports_current_temperature = 5; // Deprecated: use feature_flags + bool supports_two_point_target_temperature = 6; // Deprecated: use feature_flags + repeated ClimateMode supported_modes = 7 [(container_pointer_no_template) = "climate::ClimateModeMask"]; float visual_min_temperature = 8; float visual_max_temperature = 9; float visual_target_temperature_step = 10; // for older peer versions - in new system this // is if CLIMATE_PRESET_AWAY exists is supported_presets - bool legacy_supports_away = 11; - bool supports_action = 12; - repeated ClimateFanMode supported_fan_modes = 13; - repeated ClimateSwingMode supported_swing_modes = 14; - repeated string supported_custom_fan_modes = 15; - repeated ClimatePreset supported_presets = 16; - repeated string supported_custom_presets = 17; + // Deprecated in API version 1.5 + bool legacy_supports_away = 11 [deprecated=true]; + bool supports_action = 12; // Deprecated: use feature_flags + repeated ClimateFanMode supported_fan_modes = 13 [(container_pointer_no_template) = "climate::ClimateFanModeMask"]; + repeated ClimateSwingMode supported_swing_modes = 14 [(container_pointer_no_template) = "climate::ClimateSwingModeMask"]; + repeated string supported_custom_fan_modes = 15 [(container_pointer_no_template) = "std::vector"]; + repeated ClimatePreset supported_presets = 16 [(container_pointer_no_template) = "climate::ClimatePresetMask"]; + repeated string supported_custom_presets = 17 [(container_pointer_no_template) = "std::vector"]; bool disabled_by_default = 18; - string icon = 19; + string icon = 19 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; EntityCategory entity_category = 20; float visual_current_temperature_step = 21; - bool supports_current_humidity = 22; - bool supports_target_humidity = 23; + bool supports_current_humidity = 22; // Deprecated: use feature_flags + bool supports_target_humidity = 23; // Deprecated: use feature_flags float visual_min_humidity = 24; float visual_max_humidity = 25; + uint32 device_id = 26 [(field_ifdef) = "USE_DEVICES"]; + uint32 feature_flags = 27; + TemperatureUnit temperature_unit = 28; } message ClimateStateResponse { option (id) = 47; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_CLIMATE"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; ClimateMode mode = 2; float current_temperature = 3; float target_temperature = 4; float target_temperature_low = 5; float target_temperature_high = 6; - bool unused_legacy_away = 7; + // For older peers, equal to preset == CLIMATE_PRESET_AWAY + // Deprecated in API version 1.5 + bool unused_legacy_away = 7 [deprecated=true]; ClimateAction action = 8; ClimateFanMode fan_mode = 9; ClimateSwingMode swing_mode = 10; @@ -891,14 +1162,16 @@ message ClimateStateResponse { string custom_preset = 13; float current_humidity = 14; float target_humidity = 15; + uint32 device_id = 16 [(field_ifdef) = "USE_DEVICES"]; } message ClimateCommandRequest { option (id) = 48; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_CLIMATE"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; bool has_mode = 2; ClimateMode mode = 3; bool has_target_temperature = 4; @@ -907,8 +1180,11 @@ message ClimateCommandRequest { float target_temperature_low = 7; bool has_target_temperature_high = 8; float target_temperature_high = 9; - bool unused_has_legacy_away = 10; - bool unused_legacy_away = 11; + // legacy, for older peers, newer ones should use CLIMATE_PRESET_AWAY in preset + // Deprecated in API version 1.5 + bool unused_has_legacy_away = 10 [deprecated=true]; + // Deprecated in API version 1.5 + bool unused_legacy_away = 11 [deprecated=true]; bool has_fan_mode = 12; ClimateFanMode fan_mode = 13; bool has_swing_mode = 14; @@ -921,6 +1197,89 @@ message ClimateCommandRequest { string custom_preset = 21; bool has_target_humidity = 22; float target_humidity = 23; + uint32 device_id = 24 [(field_ifdef) = "USE_DEVICES"]; +} + +// ==================== WATER_HEATER ==================== +enum WaterHeaterMode { + WATER_HEATER_MODE_OFF = 0; + WATER_HEATER_MODE_ECO = 1; + WATER_HEATER_MODE_ELECTRIC = 2; + WATER_HEATER_MODE_PERFORMANCE = 3; + WATER_HEATER_MODE_HIGH_DEMAND = 4; + WATER_HEATER_MODE_HEAT_PUMP = 5; + WATER_HEATER_MODE_GAS = 6; +} + +message ListEntitiesWaterHeaterResponse { + option (id) = 132; + option (base_class) = "InfoResponseProtoMessage"; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_WATER_HEATER"; + + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + string icon = 4 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; + bool disabled_by_default = 5; + EntityCategory entity_category = 6; + uint32 device_id = 7 [(field_ifdef) = "USE_DEVICES"]; + float min_temperature = 8; + float max_temperature = 9; + float target_temperature_step = 10; + repeated WaterHeaterMode supported_modes = 11 [(container_pointer_no_template) = "water_heater::WaterHeaterModeMask"]; + // Bitmask of WaterHeaterFeature flags + uint32 supported_features = 12; + TemperatureUnit temperature_unit = 13; +} + +message WaterHeaterStateResponse { + option (id) = 133; + option (base_class) = "StateResponseProtoMessage"; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_WATER_HEATER"; + option (no_delay) = true; + + fixed32 key = 1 [(force) = true]; + float current_temperature = 2; + float target_temperature = 3; + WaterHeaterMode mode = 4; + uint32 device_id = 5 [(field_ifdef) = "USE_DEVICES"]; + // Bitmask of current state flags (bit 0 = away, bit 1 = on) + uint32 state = 6; + float target_temperature_low = 7; + float target_temperature_high = 8; +} + +// Bitmask for WaterHeaterCommandRequest.has_fields +enum WaterHeaterCommandHasField { + WATER_HEATER_COMMAND_HAS_NONE = 0; + WATER_HEATER_COMMAND_HAS_MODE = 1; + WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE = 2; + WATER_HEATER_COMMAND_HAS_STATE = 4 [deprecated=true]; + WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_LOW = 8; + WATER_HEATER_COMMAND_HAS_TARGET_TEMPERATURE_HIGH = 16; + WATER_HEATER_COMMAND_HAS_ON_STATE = 32; + WATER_HEATER_COMMAND_HAS_AWAY_STATE = 64; +} + +message WaterHeaterCommandRequest { + option (id) = 134; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_WATER_HEATER"; + option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; + + fixed32 key = 1 [(force) = true]; + // Bitmask of which fields are set (see WaterHeaterCommandHasField) + uint32 has_fields = 2; + WaterHeaterMode mode = 3; + float target_temperature = 4; + uint32 device_id = 5 [(field_ifdef) = "USE_DEVICES"]; + // State flags bitmask (bit 0 = away, bit 1 = on) + uint32 state = 6; + float target_temperature_low = 7; + float target_temperature_high = 8; } // ==================== NUMBER ==================== @@ -931,84 +1290,145 @@ enum NumberMode { } message ListEntitiesNumberResponse { option (id) = 49; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_NUMBER"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; float min_value = 6; float max_value = 7; float step = 8; bool disabled_by_default = 9; EntityCategory entity_category = 10; - string unit_of_measurement = 11; + string unit_of_measurement = 11 [(max_data_length) = 63]; NumberMode mode = 12; - string device_class = 13; + string device_class = 13 [(max_data_length) = 47]; + uint32 device_id = 14 [(field_ifdef) = "USE_DEVICES"]; } message NumberStateResponse { option (id) = 50; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_NUMBER"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; float state = 2; // If the number does not have a valid state yet. // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller bool missing_state = 3; + uint32 device_id = 4 [(field_ifdef) = "USE_DEVICES"]; } message NumberCommandRequest { option (id) = 51; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_NUMBER"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; float state = 2; + uint32 device_id = 3 [(field_ifdef) = "USE_DEVICES"]; } // ==================== SELECT ==================== message ListEntitiesSelectResponse { option (id) = 52; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_SELECT"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; - repeated string options = 6; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; + repeated string options = 6 [(container_pointer_no_template) = "FixedVector"]; bool disabled_by_default = 7; EntityCategory entity_category = 8; + uint32 device_id = 9 [(field_ifdef) = "USE_DEVICES"]; } message SelectStateResponse { option (id) = 53; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_SELECT"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; string state = 2; // If the select does not have a valid state yet. // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller bool missing_state = 3; + uint32 device_id = 4 [(field_ifdef) = "USE_DEVICES"]; } message SelectCommandRequest { option (id) = 54; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_SELECT"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; string state = 2; + uint32 device_id = 3 [(field_ifdef) = "USE_DEVICES"]; } +// ==================== SIREN ==================== +message ListEntitiesSirenResponse { + option (id) = 55; + option (base_class) = "InfoResponseProtoMessage"; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_SIREN"; + + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id + + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; + bool disabled_by_default = 6; + repeated string tones = 7 [(container_pointer_no_template) = "FixedVector"]; + bool supports_duration = 8; + bool supports_volume = 9; + EntityCategory entity_category = 10; + uint32 device_id = 11 [(field_ifdef) = "USE_DEVICES"]; +} +message SirenStateResponse { + option (id) = 56; + option (base_class) = "StateResponseProtoMessage"; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_SIREN"; + option (no_delay) = true; + + fixed32 key = 1 [(force) = true]; + bool state = 2; + uint32 device_id = 3 [(field_ifdef) = "USE_DEVICES"]; +} +message SirenCommandRequest { + option (id) = 57; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_SIREN"; + option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; + + fixed32 key = 1 [(force) = true]; + bool has_state = 2; + bool state = 3; + bool has_tone = 4; + string tone = 5; + bool has_duration = 6; + uint32 duration = 7; + bool has_volume = 8; + float volume = 9; + uint32 device_id = 10 [(field_ifdef) = "USE_DEVICES"]; +} // ==================== LOCK ==================== enum LockState { @@ -1018,6 +1438,8 @@ enum LockState { LOCK_STATE_JAMMED = 3; LOCK_STATE_LOCKING = 4; LOCK_STATE_UNLOCKING = 5; + LOCK_STATE_OPENING = 6; + LOCK_STATE_OPEN = 7; } enum LockCommand { LOCK_UNLOCK = 0; @@ -1026,15 +1448,16 @@ enum LockCommand { } message ListEntitiesLockResponse { option (id) = 58; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_LOCK"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; bool disabled_by_default = 6; EntityCategory entity_category = 7; bool assumed_state = 8; @@ -1044,51 +1467,60 @@ message ListEntitiesLockResponse { // Not yet implemented: string code_format = 11; + uint32 device_id = 12 [(field_ifdef) = "USE_DEVICES"]; } message LockStateResponse { option (id) = 59; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_LOCK"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; LockState state = 2; + uint32 device_id = 3 [(field_ifdef) = "USE_DEVICES"]; } message LockCommandRequest { option (id) = 60; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_LOCK"; option (no_delay) = true; - fixed32 key = 1; + option (base_class) = "CommandProtoMessage"; + fixed32 key = 1 [(force) = true]; LockCommand command = 2; // Not yet implemented: bool has_code = 3; string code = 4; + uint32 device_id = 5 [(field_ifdef) = "USE_DEVICES"]; } // ==================== BUTTON ==================== message ListEntitiesButtonResponse { option (id) = 61; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_BUTTON"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; bool disabled_by_default = 6; EntityCategory entity_category = 7; - string device_class = 8; + string device_class = 8 [(max_data_length) = 47]; + uint32 device_id = 9 [(field_ifdef) = "USE_DEVICES"]; } message ButtonCommandRequest { option (id) = 62; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_BUTTON"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; + uint32 device_id = 2 [(field_ifdef) = "USE_DEVICES"]; } // ==================== MEDIA PLAYER ==================== @@ -1097,6 +1529,9 @@ enum MediaPlayerState { MEDIA_PLAYER_STATE_IDLE = 1; MEDIA_PLAYER_STATE_PLAYING = 2; MEDIA_PLAYER_STATE_PAUSED = 3; + MEDIA_PLAYER_STATE_ANNOUNCING = 4; + MEDIA_PLAYER_STATE_OFF = 5; + MEDIA_PLAYER_STATE_ON = 6; } enum MediaPlayerCommand { MEDIA_PLAYER_COMMAND_PLAY = 0; @@ -1104,40 +1539,72 @@ enum MediaPlayerCommand { MEDIA_PLAYER_COMMAND_STOP = 2; MEDIA_PLAYER_COMMAND_MUTE = 3; MEDIA_PLAYER_COMMAND_UNMUTE = 4; + MEDIA_PLAYER_COMMAND_TOGGLE = 5; + MEDIA_PLAYER_COMMAND_VOLUME_UP = 6; + MEDIA_PLAYER_COMMAND_VOLUME_DOWN = 7; + MEDIA_PLAYER_COMMAND_ENQUEUE = 8; + MEDIA_PLAYER_COMMAND_REPEAT_ONE = 9; + MEDIA_PLAYER_COMMAND_REPEAT_OFF = 10; + MEDIA_PLAYER_COMMAND_CLEAR_PLAYLIST = 11; + MEDIA_PLAYER_COMMAND_TURN_ON = 12; + MEDIA_PLAYER_COMMAND_TURN_OFF = 13; +} +enum MediaPlayerFormatPurpose { + MEDIA_PLAYER_FORMAT_PURPOSE_DEFAULT = 0; + MEDIA_PLAYER_FORMAT_PURPOSE_ANNOUNCEMENT = 1; +} +message MediaPlayerSupportedFormat { + option (ifdef) = "USE_MEDIA_PLAYER"; + + string format = 1; + uint32 sample_rate = 2; + uint32 num_channels = 3; + MediaPlayerFormatPurpose purpose = 4; + uint32 sample_bytes = 5; } message ListEntitiesMediaPlayerResponse { option (id) = 63; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_MEDIA_PLAYER"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; bool disabled_by_default = 6; EntityCategory entity_category = 7; bool supports_pause = 8; + + repeated MediaPlayerSupportedFormat supported_formats = 9; + + uint32 device_id = 10 [(field_ifdef) = "USE_DEVICES"]; + + uint32 feature_flags = 11; } message MediaPlayerStateResponse { option (id) = 64; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_MEDIA_PLAYER"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; MediaPlayerState state = 2; float volume = 3; bool muted = 4; + uint32 device_id = 5 [(field_ifdef) = "USE_DEVICES"]; } message MediaPlayerCommandRequest { option (id) = 65; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_MEDIA_PLAYER"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; bool has_command = 2; MediaPlayerCommand command = 3; @@ -1150,6 +1617,7 @@ message MediaPlayerCommandRequest { bool has_announcement = 8; bool announcement = 9; + uint32 device_id = 10 [(field_ifdef) = "USE_DEVICES"]; } // ==================== BLUETOOTH ==================== @@ -1161,19 +1629,24 @@ message SubscribeBluetoothLEAdvertisementsRequest { uint32 flags = 1; } +// Deprecated - only used by deprecated BluetoothLEAdvertisementResponse message BluetoothServiceData { + option deprecated = true; string uuid = 1; - repeated uint32 legacy_data = 2 [deprecated = true]; - bytes data = 3; // Changed in proto version 1.7 + // Deprecated in API version 1.7 + repeated uint32 legacy_data = 2 [deprecated=true]; // Removed in api version 1.7 + bytes data = 3; // Added in api version 1.7 } +// Removed in ESPHome 2025.8.0 - use BluetoothLERawAdvertisementsResponse instead message BluetoothLEAdvertisementResponse { + option deprecated = true; option (id) = 67; option (source) = SOURCE_SERVER; option (ifdef) = "USE_BLUETOOTH_PROXY"; option (no_delay) = true; uint64 address = 1; - string name = 2; + bytes name = 2; sint32 rssi = 3; repeated string service_uuids = 4; @@ -1184,11 +1657,12 @@ message BluetoothLEAdvertisementResponse { } message BluetoothLERawAdvertisement { - uint64 address = 1; - sint32 rssi = 2; - uint32 address_type = 3; + option (inline_encode) = true; + uint64 address = 1 [(force) = true, (mac_address) = true]; + sint32 rssi = 2 [(force) = true]; + uint32 address_type = 3 [(max_value) = 4]; - bytes data = 4; + bytes data = 4 [(fixed_array_size) = 62, (force) = true]; } message BluetoothLERawAdvertisementsResponse { @@ -1196,12 +1670,13 @@ message BluetoothLERawAdvertisementsResponse { option (source) = SOURCE_SERVER; option (ifdef) = "USE_BLUETOOTH_PROXY"; option (no_delay) = true; + option (speed_optimized) = true; - repeated BluetoothLERawAdvertisement advertisements = 1; + repeated BluetoothLERawAdvertisement advertisements = 1 [(fixed_array_with_length_define) = "BLUETOOTH_PROXY_ADVERTISEMENT_BATCH_SIZE"]; } enum BluetoothDeviceRequestType { - BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT = 0; + BLUETOOTH_DEVICE_REQUEST_TYPE_CONNECT = 0 [deprecated = true]; // V1 removed, use V3 variants BLUETOOTH_DEVICE_REQUEST_TYPE_DISCONNECT = 1; BLUETOOTH_DEVICE_REQUEST_TYPE_PAIR = 2; BLUETOOTH_DEVICE_REQUEST_TYPE_UNPAIR = 3; @@ -1217,7 +1692,7 @@ message BluetoothDeviceRequest { uint64 address = 1; BluetoothDeviceRequestType request_type = 2; - bool has_address_type = 3; + bool has_address_type = 3; // Deprecated, should be removed in 2027.8 - https://github.com/esphome/esphome/pull/10318 uint32 address_type = 4; } @@ -1241,21 +1716,39 @@ message BluetoothGATTGetServicesRequest { } message BluetoothGATTDescriptor { - repeated uint64 uuid = 1; + repeated uint64 uuid = 1 [(fixed_array_size) = 2, (fixed_array_skip_zero) = true]; uint32 handle = 2; + + // New field for efficient UUID (v1.12+) + // Only one of uuid or short_uuid will be set. + // short_uuid is used for both 16-bit and 32-bit UUIDs with v1.12+ clients. + // 128-bit UUIDs always use the uuid field for backwards compatibility. + uint32 short_uuid = 3; // 16-bit or 32-bit UUID } message BluetoothGATTCharacteristic { - repeated uint64 uuid = 1; + repeated uint64 uuid = 1 [(fixed_array_size) = 2, (fixed_array_skip_zero) = true]; uint32 handle = 2; uint32 properties = 3; - repeated BluetoothGATTDescriptor descriptors = 4; + repeated BluetoothGATTDescriptor descriptors = 4 [(fixed_vector) = true]; + + // New field for efficient UUID (v1.12+) + // Only one of uuid or short_uuid will be set. + // short_uuid is used for both 16-bit and 32-bit UUIDs with v1.12+ clients. + // 128-bit UUIDs always use the uuid field for backwards compatibility. + uint32 short_uuid = 5; // 16-bit or 32-bit UUID } message BluetoothGATTService { - repeated uint64 uuid = 1; + repeated uint64 uuid = 1 [(fixed_array_size) = 2, (fixed_array_skip_zero) = true]; uint32 handle = 2; - repeated BluetoothGATTCharacteristic characteristics = 3; + repeated BluetoothGATTCharacteristic characteristics = 3 [(fixed_vector) = true]; + + // New field for efficient UUID (v1.12+) + // Only one of uuid or short_uuid will be set. + // short_uuid is used for both 16-bit and 32-bit UUIDs with v1.12+ clients. + // 128-bit UUIDs always use the uuid field for backwards compatibility. + uint32 short_uuid = 4; // 16-bit or 32-bit UUID } message BluetoothGATTGetServicesResponse { @@ -1362,6 +1855,10 @@ message BluetoothConnectionsFreeResponse { uint32 free = 1; uint32 limit = 2; + repeated uint64 allocated = 3 [ + (fixed_array_size_define) = "BLUETOOTH_PROXY_MAX_CONNECTIONS", + (fixed_array_skip_zero) = true + ]; } message BluetoothGATTErrorResponse { @@ -1428,7 +1925,39 @@ message BluetoothDeviceClearCacheResponse { int32 error = 3; } -// ==================== PUSH TO TALK ==================== +enum BluetoothScannerState { + BLUETOOTH_SCANNER_STATE_IDLE = 0; + BLUETOOTH_SCANNER_STATE_STARTING = 1; + BLUETOOTH_SCANNER_STATE_RUNNING = 2; + BLUETOOTH_SCANNER_STATE_FAILED = 3; + BLUETOOTH_SCANNER_STATE_STOPPING = 4; + BLUETOOTH_SCANNER_STATE_STOPPED = 5; +} + +enum BluetoothScannerMode { + BLUETOOTH_SCANNER_MODE_PASSIVE = 0; + BLUETOOTH_SCANNER_MODE_ACTIVE = 1; +} + +message BluetoothScannerStateResponse { + option(id) = 126; + option(source) = SOURCE_SERVER; + option(ifdef) = "USE_BLUETOOTH_PROXY"; + + BluetoothScannerState state = 1; + BluetoothScannerMode mode = 2; + BluetoothScannerMode configured_mode = 3; +} + +message BluetoothScannerSetModeRequest { + option(id) = 127; + option(source) = SOURCE_CLIENT; + option(ifdef) = "USE_BLUETOOTH_PROXY"; + + BluetoothScannerMode mode = 1; +} + +// ==================== VOICE ASSISTANT ==================== enum VoiceAssistantSubscribeFlag { VOICE_ASSISTANT_SUBSCRIBE_NONE = 0; VOICE_ASSISTANT_SUBSCRIBE_API_AUDIO = 1; @@ -1492,6 +2021,7 @@ enum VoiceAssistantEvent { VOICE_ASSISTANT_STT_VAD_END = 12; VOICE_ASSISTANT_TTS_STREAM_START = 98; VOICE_ASSISTANT_TTS_STREAM_END = 99; + VOICE_ASSISTANT_INTENT_PROGRESS = 100; } message VoiceAssistantEventData { @@ -1513,10 +2043,91 @@ message VoiceAssistantAudio { option (source) = SOURCE_BOTH; option (ifdef) = "USE_VOICE_ASSISTANT"; - bytes data = 1; + bytes data = 1 [(pointer_to_buffer) = true]; bool end = 2; + bytes data2 = 3 [(pointer_to_buffer) = true]; +} + +enum VoiceAssistantTimerEvent { + VOICE_ASSISTANT_TIMER_STARTED = 0; + VOICE_ASSISTANT_TIMER_UPDATED = 1; + VOICE_ASSISTANT_TIMER_CANCELLED = 2; + VOICE_ASSISTANT_TIMER_FINISHED = 3; +} + +message VoiceAssistantTimerEventResponse { + option (id) = 115; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_VOICE_ASSISTANT"; + + VoiceAssistantTimerEvent event_type = 1; + string timer_id = 2; + string name = 3; + uint32 total_seconds = 4; + uint32 seconds_left = 5; + bool is_active = 6; +} + +message VoiceAssistantAnnounceRequest { + option (id) = 119; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_VOICE_ASSISTANT"; + + string media_id = 1; + string text = 2; + string preannounce_media_id = 3; + bool start_conversation = 4; +} + +message VoiceAssistantAnnounceFinished { + option (id) = 120; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_VOICE_ASSISTANT"; + + bool success = 1; +} + +message VoiceAssistantWakeWord { + string id = 1; + string wake_word = 2; + repeated string trained_languages = 3; +} + +message VoiceAssistantExternalWakeWord { + string id = 1; + string wake_word = 2; + repeated string trained_languages = 3; + string model_type = 4; + uint32 model_size = 5; + string model_hash = 6; + string url = 7; } +message VoiceAssistantConfigurationRequest { + option (id) = 121; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_VOICE_ASSISTANT"; + + repeated VoiceAssistantExternalWakeWord external_wake_words = 1; +} + +message VoiceAssistantConfigurationResponse { + option (id) = 122; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_VOICE_ASSISTANT"; + + repeated VoiceAssistantWakeWord available_wake_words = 1; + repeated string active_wake_words = 2 [(container_pointer) = "std::vector"]; + uint32 max_active_wake_words = 3; +} + +message VoiceAssistantSetConfiguration { + option (id) = 123; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_VOICE_ASSISTANT"; + + repeated string active_wake_words = 1; +} // ==================== ALARM CONTROL PANEL ==================== enum AlarmControlPanelState { @@ -1544,28 +2155,32 @@ enum AlarmControlPanelStateCommand { message ListEntitiesAlarmControlPanelResponse { option (id) = 94; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_ALARM_CONTROL_PANEL"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; - string icon = 5; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; bool disabled_by_default = 6; EntityCategory entity_category = 7; uint32 supported_features = 8; bool requires_code = 9; bool requires_code_to_arm = 10; + uint32 device_id = 11 [(field_ifdef) = "USE_DEVICES"]; } message AlarmControlPanelStateResponse { option (id) = 95; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_ALARM_CONTROL_PANEL"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; AlarmControlPanelState state = 2; + uint32 device_id = 3 [(field_ifdef) = "USE_DEVICES"]; } message AlarmControlPanelCommandRequest { @@ -1573,9 +2188,11 @@ message AlarmControlPanelCommandRequest { option (source) = SOURCE_CLIENT; option (ifdef) = "USE_ALARM_CONTROL_PANEL"; option (no_delay) = true; - fixed32 key = 1; + option (base_class) = "CommandProtoMessage"; + fixed32 key = 1 [(force) = true]; AlarmControlPanelStateCommand command = 2; string code = 3; + uint32 device_id = 4 [(field_ifdef) = "USE_DEVICES"]; } // ===================== TEXT ===================== @@ -1585,14 +2202,15 @@ enum TextMode { } message ListEntitiesTextResponse { option (id) = 97; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_TEXT"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; - string icon = 5; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; bool disabled_by_default = 6; EntityCategory entity_category = 7; @@ -1600,158 +2218,181 @@ message ListEntitiesTextResponse { uint32 max_length = 9; string pattern = 10; TextMode mode = 11; + uint32 device_id = 12 [(field_ifdef) = "USE_DEVICES"]; } message TextStateResponse { option (id) = 98; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_TEXT"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; string state = 2; // If the Text does not have a valid state yet. // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller bool missing_state = 3; + uint32 device_id = 4 [(field_ifdef) = "USE_DEVICES"]; } message TextCommandRequest { option (id) = 99; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_TEXT"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; string state = 2; + uint32 device_id = 3 [(field_ifdef) = "USE_DEVICES"]; } // ==================== DATETIME DATE ==================== message ListEntitiesDateResponse { option (id) = 100; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_DATETIME_DATE"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; bool disabled_by_default = 6; EntityCategory entity_category = 7; + uint32 device_id = 8 [(field_ifdef) = "USE_DEVICES"]; } message DateStateResponse { option (id) = 101; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_DATETIME_DATE"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; // If the date does not have a valid state yet. // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller bool missing_state = 2; uint32 year = 3; uint32 month = 4; uint32 day = 5; + uint32 device_id = 6 [(field_ifdef) = "USE_DEVICES"]; } message DateCommandRequest { option (id) = 102; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_DATETIME_DATE"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; uint32 year = 2; uint32 month = 3; uint32 day = 4; + uint32 device_id = 5 [(field_ifdef) = "USE_DEVICES"]; } // ==================== DATETIME TIME ==================== message ListEntitiesTimeResponse { option (id) = 103; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_DATETIME_TIME"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; bool disabled_by_default = 6; EntityCategory entity_category = 7; + uint32 device_id = 8 [(field_ifdef) = "USE_DEVICES"]; } message TimeStateResponse { option (id) = 104; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_DATETIME_TIME"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; // If the time does not have a valid state yet. // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller bool missing_state = 2; uint32 hour = 3; uint32 minute = 4; uint32 second = 5; + uint32 device_id = 6 [(field_ifdef) = "USE_DEVICES"]; } message TimeCommandRequest { option (id) = 105; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_DATETIME_TIME"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; uint32 hour = 2; uint32 minute = 3; uint32 second = 4; + uint32 device_id = 5 [(field_ifdef) = "USE_DEVICES"]; } // ==================== EVENT ==================== message ListEntitiesEventResponse { option (id) = 107; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_EVENT"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; bool disabled_by_default = 6; EntityCategory entity_category = 7; - string device_class = 8; + string device_class = 8 [(max_data_length) = 47]; - repeated string event_types = 9; + repeated string event_types = 9 [(container_pointer_no_template) = "FixedVector"]; + uint32 device_id = 10 [(field_ifdef) = "USE_DEVICES"]; } message EventResponse { option (id) = 108; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_EVENT"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; string event_type = 2; + uint32 device_id = 3 [(field_ifdef) = "USE_DEVICES"]; } // ==================== VALVE ==================== message ListEntitiesValveResponse { option (id) = 109; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_VALVE"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; bool disabled_by_default = 6; EntityCategory entity_category = 7; - string device_class = 8; + string device_class = 8 [(max_data_length) = 47]; bool assumed_state = 9; bool supports_position = 10; bool supports_stop = 11; + uint32 device_id = 12 [(field_ifdef) = "USE_DEVICES"]; } enum ValveOperation { @@ -1761,13 +2402,15 @@ enum ValveOperation { } message ValveStateResponse { option (id) = 110; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_VALVE"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; float position = 2; ValveOperation current_operation = 3; + uint32 device_id = 4 [(field_ifdef) = "USE_DEVICES"]; } message ValveCommandRequest { @@ -1775,46 +2418,337 @@ message ValveCommandRequest { option (source) = SOURCE_CLIENT; option (ifdef) = "USE_VALVE"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; bool has_position = 2; float position = 3; bool stop = 4; + uint32 device_id = 5 [(field_ifdef) = "USE_DEVICES"]; } // ==================== DATETIME DATETIME ==================== message ListEntitiesDateTimeResponse { option (id) = 112; + option (base_class) = "InfoResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_DATETIME_DATETIME"; - string object_id = 1; - fixed32 key = 2; - string name = 3; - string unique_id = 4; + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id - string icon = 5; + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; bool disabled_by_default = 6; EntityCategory entity_category = 7; + uint32 device_id = 8 [(field_ifdef) = "USE_DEVICES"]; } message DateTimeStateResponse { option (id) = 113; + option (base_class) = "StateResponseProtoMessage"; option (source) = SOURCE_SERVER; option (ifdef) = "USE_DATETIME_DATETIME"; option (no_delay) = true; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; // If the datetime does not have a valid state yet. // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller bool missing_state = 2; fixed32 epoch_seconds = 3; + uint32 device_id = 4 [(field_ifdef) = "USE_DEVICES"]; } message DateTimeCommandRequest { option (id) = 114; option (source) = SOURCE_CLIENT; option (ifdef) = "USE_DATETIME_DATETIME"; option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; - fixed32 key = 1; + fixed32 key = 1 [(force) = true]; fixed32 epoch_seconds = 2; -} \ No newline at end of file + uint32 device_id = 3 [(field_ifdef) = "USE_DEVICES"]; +} + +// ==================== UPDATE ==================== +message ListEntitiesUpdateResponse { + option (id) = 116; + option (base_class) = "InfoResponseProtoMessage"; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_UPDATE"; + + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + reserved 4; // Deprecated: was string unique_id + + string icon = 5 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; + bool disabled_by_default = 6; + EntityCategory entity_category = 7; + string device_class = 8 [(max_data_length) = 47]; + uint32 device_id = 9 [(field_ifdef) = "USE_DEVICES"]; +} +message UpdateStateResponse { + option (id) = 117; + option (base_class) = "StateResponseProtoMessage"; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_UPDATE"; + option (no_delay) = true; + + fixed32 key = 1 [(force) = true]; + bool missing_state = 2; + bool in_progress = 3; + bool has_progress = 4; + float progress = 5; + string current_version = 6; + string latest_version = 7; + string title = 8; + string release_summary = 9; + string release_url = 10; + uint32 device_id = 11 [(field_ifdef) = "USE_DEVICES"]; +} +enum UpdateCommand { + UPDATE_COMMAND_NONE = 0; + UPDATE_COMMAND_UPDATE = 1; + UPDATE_COMMAND_CHECK = 2; +} +message UpdateCommandRequest { + option (id) = 118; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_UPDATE"; + option (no_delay) = true; + option (base_class) = "CommandProtoMessage"; + + fixed32 key = 1 [(force) = true]; + UpdateCommand command = 2; + uint32 device_id = 3 [(field_ifdef) = "USE_DEVICES"]; +} + +// ==================== Z-WAVE ==================== + +message ZWaveProxyFrame { + option (id) = 128; + option (source) = SOURCE_BOTH; + option (ifdef) = "USE_ZWAVE_PROXY"; + option (no_delay) = true; + option (speed_optimized) = true; + + bytes data = 1; +} + +enum ZWaveProxyRequestType { + ZWAVE_PROXY_REQUEST_TYPE_SUBSCRIBE = 0; + ZWAVE_PROXY_REQUEST_TYPE_UNSUBSCRIBE = 1; + ZWAVE_PROXY_REQUEST_TYPE_HOME_ID_CHANGE = 2; +} +message ZWaveProxyRequest { + option (id) = 129; + option (source) = SOURCE_BOTH; + option (ifdef) = "USE_ZWAVE_PROXY"; + + ZWaveProxyRequestType type = 1; + bytes data = 2; +} + +// ==================== INFRARED ==================== +// Note: Feature and capability flag enums are defined in +// esphome/components/infrared/infrared.h + +// Listing of infrared instances +message ListEntitiesInfraredResponse { + option (id) = 135; + option (base_class) = "InfoResponseProtoMessage"; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_INFRARED"; + + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + string icon = 4 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; + bool disabled_by_default = 5; + EntityCategory entity_category = 6; + uint32 device_id = 7 [(field_ifdef) = "USE_DEVICES"]; + uint32 capabilities = 8; // Bitfield of InfraredCapabilityFlags + uint32 receiver_frequency = 9; // Demodulation frequency of the IR receiver in Hz (0 = unspecified) +} + +// Command to transmit infrared/RF data using raw timings +message InfraredRFTransmitRawTimingsRequest { + option (id) = 136; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_IR_RF || USE_RADIO_FREQUENCY"; + + uint32 device_id = 1 [(field_ifdef) = "USE_DEVICES"]; + fixed32 key = 2 [(force) = true]; // Key identifying the transmitter instance + uint32 carrier_frequency = 3; // Carrier frequency in Hz + uint32 repeat_count = 4; // Number of times to transmit (1 = once, 2 = twice, etc.) + repeated sint32 timings = 5 [packed = true, (packed_buffer) = true]; // Raw timings in microseconds (zigzag-encoded): positive = mark (LED/TX on), negative = space (LED/TX off) + uint32 modulation = 6; // RadioFrequencyModulation enum value (0 = OOK; ignored for IR entities) +} + +// Event message for received infrared/RF data +message InfraredRFReceiveEvent { + option (id) = 137; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_IR_RF || USE_RADIO_FREQUENCY"; + option (no_delay) = true; + option (speed_optimized) = true; + + uint32 device_id = 1 [(field_ifdef) = "USE_DEVICES"]; + fixed32 key = 2 [(force) = true]; // Key identifying the receiver instance + repeated sint32 timings = 3 [packed = true, (container_pointer_no_template) = "std::vector"]; // Raw timings in microseconds (zigzag-encoded): alternating mark/space periods +} + +// ==================== RADIO FREQUENCY ==================== + +// Lists available radio frequency entity instances +message ListEntitiesRadioFrequencyResponse { + option (id) = 148; + option (base_class) = "InfoResponseProtoMessage"; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_RADIO_FREQUENCY"; + + string object_id = 1 [(max_data_length) = 120, (force) = true]; + fixed32 key = 2 [(force) = true]; + string name = 3 [(max_data_length) = 120, (force) = true]; + string icon = 4 [(field_ifdef) = "USE_ENTITY_ICON", (max_data_length) = 63]; + bool disabled_by_default = 5; + EntityCategory entity_category = 6; + uint32 device_id = 7 [(field_ifdef) = "USE_DEVICES"]; + uint32 capabilities = 8; // Bitmask of RadioFrequencyCapabilityFlags: bit 0 = transmitter, bit 1 = receiver + uint32 frequency_min = 9; // Minimum tunable frequency in Hz; if min == max (non-zero): fixed frequency; 0 = unspecified + uint32 frequency_max = 10; // Maximum tunable frequency in Hz; 0 = unspecified + uint32 supported_modulations = 11; // Bitmask of supported RadioFrequencyModulation values (bit N = modulation N supported) +} + +// ==================== SERIAL PROXY ==================== + +enum SerialProxyParity { + SERIAL_PROXY_PARITY_NONE = 0; + SERIAL_PROXY_PARITY_EVEN = 1; + SERIAL_PROXY_PARITY_ODD = 2; +} + +// Configure UART parameters for a serial proxy instance +message SerialProxyConfigureRequest { + option (id) = 138; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_SERIAL_PROXY"; + + uint32 instance = 1; // Instance index (0-based) + uint32 baudrate = 2; // Baud rate in bits per second + bool flow_control = 3; // Enable hardware flow control + SerialProxyParity parity = 4; // Parity setting + uint32 stop_bits = 5; // Number of stop bits (1 or 2) + uint32 data_size = 6; // Number of data bits (5-8) +} + +// Data received from a serial device, forwarded to clients +message SerialProxyDataReceived { + option (id) = 139; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_SERIAL_PROXY"; + option (no_delay) = true; + option (speed_optimized) = true; + + uint32 instance = 1; // Instance index (0-based) + bytes data = 2; // Raw data received from the serial device +} + +// Write data to a serial device +message SerialProxyWriteRequest { + option (id) = 140; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_SERIAL_PROXY"; + option (no_delay) = true; + + uint32 instance = 1; // Instance index (0-based) + bytes data = 2; // Raw data to write to the serial device +} + +// Set modem control pin states (RTS and DTR) +message SerialProxySetModemPinsRequest { + option (id) = 141; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_SERIAL_PROXY"; + + uint32 instance = 1; // Instance index (0-based) + uint32 line_states = 2; // Bitmask of SerialProxyLineStateFlags +} + +// Request current modem control pin states +message SerialProxyGetModemPinsRequest { + option (id) = 142; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_SERIAL_PROXY"; + + uint32 instance = 1; // Instance index (0-based) +} + +// Response with current modem control pin states +message SerialProxyGetModemPinsResponse { + option (id) = 143; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_SERIAL_PROXY"; + + uint32 instance = 1; // Instance index (0-based) + uint32 line_states = 2; // Bitmask of SerialProxyLineStateFlags +} + +enum SerialProxyRequestType { + SERIAL_PROXY_REQUEST_TYPE_SUBSCRIBE = 0; // Subscribe to receive data from this serial proxy instance + SERIAL_PROXY_REQUEST_TYPE_UNSUBSCRIBE = 1; // Unsubscribe from this serial proxy instance + SERIAL_PROXY_REQUEST_TYPE_FLUSH = 2; // Flush the serial port (block until all TX data is sent) +} + +enum SerialProxyStatus { + SERIAL_PROXY_STATUS_OK = 0; // Completed successfully; TX drain confirmed + SERIAL_PROXY_STATUS_ASSUMED_SUCCESS = 1; // Platform cannot confirm TX drain; success assumed + SERIAL_PROXY_STATUS_ERROR = 2; // Driver or hardware error + SERIAL_PROXY_STATUS_TIMEOUT = 3; // Timed out before TX completed + SERIAL_PROXY_STATUS_NOT_SUPPORTED = 4; // Request type not supported by this instance +} + +// Generic request message for simple serial proxy operations +message SerialProxyRequest { + option (id) = 144; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_SERIAL_PROXY"; + + uint32 instance = 1; // Instance index (0-based) + SerialProxyRequestType type = 2; // Request type +} + +// Response to a SerialProxyRequest (e.g. flush completion or failure) +message SerialProxyRequestResponse { + option (id) = 147; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_SERIAL_PROXY"; + + uint32 instance = 1; // Instance index (0-based) + SerialProxyRequestType type = 2; // Which request type this responds to + SerialProxyStatus status = 3; // Result status + string error_message = 4; // Additional detail on failure (optional) +} + +// ==================== BLUETOOTH CONNECTION PARAMS ==================== +message BluetoothSetConnectionParamsRequest { + option (id) = 145; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_BLUETOOTH_PROXY"; + + uint64 address = 1; + uint32 min_interval = 2; // units of 1.25ms + uint32 max_interval = 3; // units of 1.25ms + uint32 latency = 4; + uint32 timeout = 5; // units of 10ms +} + +message BluetoothSetConnectionParamsResponse { + option (id) = 146; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_BLUETOOTH_PROXY"; + + uint64 address = 1; + int32 error = 2; +} diff --git a/proto/api_options.proto b/proto/api_options.proto index a8429f3..ac9c4e5 100644 --- a/proto/api_options.proto +++ b/proto/api_options.proto @@ -21,4 +21,99 @@ extend google.protobuf.MessageOptions { optional string ifdef = 1038; optional bool log = 1039 [default=true]; optional bool no_delay = 1040 [default=false]; -} \ No newline at end of file + optional string base_class = 1041; + optional bool inline_encode = 1042 [default=false]; + optional bool speed_optimized = 1043 [default=false]; +} + +extend google.protobuf.FieldOptions { + optional string field_ifdef = 1042; + optional uint32 fixed_array_size = 50007; + optional bool fixed_array_skip_zero = 50009 [default=false]; + optional string fixed_array_size_define = 50010; + optional string fixed_array_with_length_define = 50011; + + // pointer_to_buffer: Use pointer instead of array for fixed-size byte fields + // When set, the field will be declared as a pointer (const uint8_t *data) + // instead of an array (uint8_t data[N]). This allows zero-copy on decode + // by pointing directly to the protobuf buffer. The buffer must remain valid + // until the message is processed (which is guaranteed for stack-allocated messages). + optional bool pointer_to_buffer = 50012 [default=false]; + + // container_pointer: Zero-copy optimization for repeated fields. + // + // When container_pointer is set on a repeated field, the generated message will + // store a pointer to an existing container instead of copying the data into the + // message's own repeated field. This eliminates heap allocations and improves performance. + // + // Requirements for safe usage: + // 1. The source container must remain valid until the message is encoded + // 2. Messages must be encoded immediately (which ESPHome does by default) + // 3. The container type must match the field type exactly + // + // Supported container types: + // - "std::vector" for most repeated fields + // - "std::set" for unique/sorted data + // - Full type specification required for enums (e.g., "std::set") + // + // Example usage in .proto file: + // repeated string supported_modes = 12 [(container_pointer) = "std::set"]; + // repeated ColorMode color_modes = 13 [(container_pointer) = "std::set"]; + // + // The corresponding C++ code must provide const reference access to a container + // that matches the specified type and remains valid during message encoding. + // This is typically done through methods returning const T& or special accessor + // methods like get_options() or supported_modes_for_api_(). + optional string container_pointer = 50001; + + // fixed_vector: Use FixedVector instead of std::vector for repeated fields + // When set, the repeated field will use FixedVector which requires calling + // init(size) before adding elements. This eliminates std::vector template overhead + // and is ideal when the exact size is known before populating the array. + optional bool fixed_vector = 50013 [default=false]; + + // container_pointer_no_template: Use a non-template container type for repeated fields + // Similar to container_pointer, but for containers that don't take template parameters. + // The container type is used as-is without appending element type. + // The container must have: + // - begin() and end() methods returning iterators + // - empty() method + // 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]; + + // force: Always encode this field, even when its value equals the proto3 default. + // Skips the zero/empty check in calculate_size() and encode(), using the _force + // variant of the calc_ method. Use on fields that are almost always non-default + // to eliminate dead branches on hot paths. + optional bool force = 50016 [default=false]; + + // max_value: Maximum value a field can have. + // When max_value < 128, the code generator emits constant-size calculations + // and direct byte writes instead of varint branching, since the encoded varint + // is guaranteed to be 1 byte. + optional uint32 max_value = 50017; + + // max_data_length: Maximum length of a string or bytes field. + // When max_data_length < 128, the code generator emits constant-size + // length varint calculations and direct byte writes, since the length + // varint is guaranteed to be 1 byte. + optional uint32 max_data_length = 50018; + + // mac_address: Field is a 48-bit MAC address stored in a uint64. + // Emits encode_varint_raw_48bit which has a 7-byte fast path that avoids + // the per-byte loop when the upper bits are non-zero (the common case + // for real MAC addresses, since OUIs occupy the top 24 bits). + optional bool mac_address = 50019 [default=false]; +} diff --git a/proto/generate.sh b/proto/generate.sh index d60c0a0..9c2e1ee 100755 --- a/proto/generate.sh +++ b/proto/generate.sh @@ -1,14 +1,35 @@ #!/bin/bash +set -euo pipefail -# pre-requests -# go get -u google.golang.org/protobuf/cmd/protoc-gen-go -# go install google.golang.org/protobuf/cmd/protoc-gen-go +# Prerequisites: +# go install google.golang.org/protobuf/cmd/protoc-gen-go@latest +# protoc (https://github.com/protocolbuffers/protobuf/releases) +# google/protobuf/descriptor.proto must be on the import path +# (bundled with protoc under include/) -OUT_DIR=../pkg/api -mkdir -p ${OUT_DIR} +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +OUT_DIR="${SCRIPT_DIR}/../pkg/api" +MODULE="github.com/mycontroller-org/esphome_api/pkg/api" +mkdir -p "${OUT_DIR}" +# Prefer PROTOC_INCLUDE if set; otherwise try common locations. +INCLUDE_FLAGS=() +if [[ -n "${PROTOC_INCLUDE:-}" ]]; then + INCLUDE_FLAGS+=(-I"${PROTOC_INCLUDE}") +elif [[ -d /tmp/protoc-install/include ]]; then + INCLUDE_FLAGS+=(-I/tmp/protoc-install/include) +elif [[ -d /usr/include ]]; then + INCLUDE_FLAGS+=(-I/usr/include) +fi + +cd "${SCRIPT_DIR}" protoc \ - --go_out=${OUT_DIR} --go_opt=paths=source_relative \ - --go_opt=Mapi.proto=pkg/api \ - --go_opt=Mapi_options.proto=pkg/api \ - *.proto + -I. \ + "${INCLUDE_FLAGS[@]}" \ + --go_out="${OUT_DIR}" --go_opt=paths=source_relative \ + --go_opt=Mapi.proto="${MODULE}" \ + --go_opt=Mapi_options.proto="${MODULE}" \ + api.proto api_options.proto + +echo "Generated Go bindings in ${OUT_DIR}" +echo "Note: after regenerating, update pkg/api/helper.go type-id maps if message IDs changed." diff --git a/scripts/generate_executables.sh b/scripts/generate_executables.sh index 73e756d..1e42029 100755 --- a/scripts/generate_executables.sh +++ b/scripts/generate_executables.sh @@ -53,7 +53,7 @@ do GOARCH=${platform_raw[1]} package_name="esphomectl-${GOOS}-${GOARCH}" - env GOOS=${GOOS} GOARCH=${GOARCH} go build -o ${BUILD_DIR}/${BINARY_DIR}/${package_name} -ldflags "-s -w $LD_FLAGS" cli/main.go + env GOOS=${GOOS} GOARCH=${GOARCH} go build -trimpath -o ${BUILD_DIR}/${BINARY_DIR}/${package_name} -ldflags "-s -w $LD_FLAGS" cli/main.go if [ $? -ne 0 ]; then echo 'an error has occurred. aborting the build process' exit 1 From aad7c0de791883b2a3bb166d0f19aa717f91db53 Mon Sep 17 00:00:00 2001 From: Jeeva Kandasamy Date: Sat, 18 Jul 2026 08:20:53 +0530 Subject: [PATCH 2/4] bump go version and lint version Signed-off-by: Jeeva Kandasamy --- .github/workflows/lint.yaml | 12 ++++++++---- go.mod | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 27d1e79..3b2afef 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -10,13 +10,17 @@ jobs: name: lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + - name: Checkout + uses: actions/checkout@v4 with: - go-version: ^1.21 + fetch-depth: 0 + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version-file: go.mod - name: golangci-lint - uses: golangci/golangci-lint-action@v2 + uses: golangci/golangci-lint-action@v9 with: version: latest skip-go-installation: true diff --git a/go.mod b/go.mod index e6ee827..b8dae61 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/mycontroller-org/esphome_api -go 1.21 +go 1.25 require ( github.com/flynn/noise v1.0.1-0.20220214164934-d803f5c4b0f4 From fbb971c28b1f0dfa13425f89078d4b4b9fdd6e08 Mon Sep 17 00:00:00 2001 From: Jeeva Kandasamy Date: Sat, 18 Jul 2026 08:26:50 +0530 Subject: [PATCH 3/4] address lint issues Signed-off-by: Jeeva Kandasamy --- .github/workflows/lint.yaml | 1 - cli/command/device/device.go | 10 +++++----- cli/command/device/get_entities.go | 12 ++++++------ cli/command/root/cmd.go | 11 ++++++----- cli/command/root/login.go | 12 ++++++------ examples/camera/main.go | 10 +++++++--- examples/device_info/main.go | 2 +- examples/tail_logs/main.go | 2 +- pkg/client/client.go | 12 +++++++----- 9 files changed, 39 insertions(+), 33 deletions(-) diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 3b2afef..f10f326 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -23,6 +23,5 @@ jobs: uses: golangci/golangci-lint-action@v9 with: version: latest - skip-go-installation: true # Optional: show only new issues if it's a pull request. The default value is `false`. # only-new-issues: true diff --git a/cli/command/device/device.go b/cli/command/device/device.go index 64b626e..9344afd 100644 --- a/cli/command/device/device.go +++ b/cli/command/device/device.go @@ -27,21 +27,21 @@ var deviceContextCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { if len(args) == 0 { if rootCmd.CONFIG.Active == "" { - fmt.Fprintln(cmd.OutOrStdout(), "No resource found") + _, _ = fmt.Fprintln(cmd.OutOrStdout(), "No resource found") return } - fmt.Fprintf(cmd.ErrOrStderr(), "Active node '%s'\n", rootCmd.CONFIG.Active) + _, _ = fmt.Fprintf(cmd.ErrOrStderr(), "Active node '%s'\n", rootCmd.CONFIG.Active) return } rootCmd.CONFIG.Active = strings.TrimSpace(args[0]) client, err := rootCmd.GetActiveClient(nil) if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), "Error on login", err) + _, _ = fmt.Fprintln(cmd.ErrOrStderr(), "Error on login", err) return } if client != nil { rootCmd.WriteConfigFile() - fmt.Fprintf(cmd.OutOrStdout(), "Switched to '%s'\n", rootCmd.CONFIG.Active) + _, _ = fmt.Fprintf(cmd.OutOrStdout(), "Switched to '%s'\n", rootCmd.CONFIG.Active) } }, } @@ -54,7 +54,7 @@ var getDevicesCmd = &cobra.Command{ `, Run: func(cmd *cobra.Command, args []string) { if len(rootCmd.CONFIG.Devices) == 0 { - fmt.Fprintln(cmd.OutOrStdout(), "No resource found") + _, _ = fmt.Fprintln(cmd.OutOrStdout(), "No resource found") return } headers := []printer.Header{ diff --git a/cli/command/device/get_entities.go b/cli/command/device/get_entities.go index 7bfaad8..459e085 100644 --- a/cli/command/device/get_entities.go +++ b/cli/command/device/get_entities.go @@ -45,7 +45,7 @@ var getEntitiesCmd = &cobra.Command{ default: _, _deviceClass, err := filterUtils.GetValueByKeyPath(entity, "deviceClass") if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), "error:", err) + _, _ = fmt.Fprintln(cmd.ErrOrStderr(), "error:", err) return } deviceClass := convertor.ToString(_deviceClass) @@ -60,13 +60,13 @@ var getEntitiesCmd = &cobra.Command{ client, err := rootCmd.GetActiveClient(collectEntities) if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), "error:", err.Error()) + _, _ = fmt.Fprintln(cmd.ErrOrStderr(), "error:", err.Error()) return } err = client.ListEntities() if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), "error:", err.Error()) + _, _ = fmt.Fprintln(cmd.ErrOrStderr(), "error:", err.Error()) return } @@ -79,13 +79,13 @@ var getEntitiesCmd = &cobra.Command{ } if len(entities) == 0 { - fmt.Fprintln(cmd.OutOrStdout(), "No resource found") + _, _ = fmt.Fprintln(cmd.OutOrStdout(), "No resource found") return } for k, _sensors := range entities { - fmt.Fprintln(cmd.OutOrStdout()) - fmt.Fprintln(cmd.OutOrStdout(), strings.ToUpper(k)) + _, _ = fmt.Fprintln(cmd.OutOrStdout()) + _, _ = fmt.Fprintln(cmd.OutOrStdout(), strings.ToUpper(k)) switch k { case "light": diff --git a/cli/command/root/cmd.go b/cli/command/root/cmd.go index 723e1b6..20a3f3c 100644 --- a/cli/command/root/cmd.go +++ b/cli/command/root/cmd.go @@ -83,7 +83,7 @@ func GetClient(cfg *cliTY.DeviceConfig, callBackFunc TY.CallBackFunc) (*client.C } password := cfg.GetPassword() if password != "" { - fmt.Fprintln(ioStreams.ErrOut, + _, _ = fmt.Fprintln(ioStreams.ErrOut, "WARNING: API password auth is deprecated and was removed in ESPHome 2026.1.0. Prefer --encryption-key / encryptionKey.") err = _client.Login(password) // legacy password auth (pre-2026.1) } else { @@ -100,7 +100,7 @@ func GetClient(cfg *cliTY.DeviceConfig, callBackFunc TY.CallBackFunc) (*client.C func Execute(streams clientTY.IOStreams) { ioStreams = streams if err := rootCmd.Execute(); err != nil { - fmt.Fprintln(ioStreams.ErrOut, err) + _, _ = fmt.Fprintln(ioStreams.ErrOut, err) os.Exit(1) } } @@ -115,11 +115,12 @@ func WriteConfigFile() { configBytes, err := yaml.Marshal(CONFIG) if err != nil { - fmt.Fprintf(ioStreams.ErrOut, "error on config file marshal. error:[%s]\n", err.Error()) + _, _ = fmt.Fprintf(ioStreams.ErrOut, "error on config file marshal. error:[%s]\n", err.Error()) + return } err = os.WriteFile(cfgFile, configBytes, os.ModePerm) if err != nil { - fmt.Fprintf(ioStreams.ErrOut, "error on writing config file to disk, filename:%s, error:[%s]\n", cfgFile, err.Error()) + _, _ = fmt.Fprintf(ioStreams.ErrOut, "error on writing config file to disk, filename:%s, error:[%s]\n", cfgFile, err.Error()) } } @@ -148,7 +149,7 @@ func loadConfig() { if err := viper.ReadInConfig(); err == nil { err = viper.Unmarshal(&CONFIG) if err != nil { - fmt.Fprint(ioStreams.ErrOut, "error on unmarshal of config\n", err) + _, _ = fmt.Fprint(ioStreams.ErrOut, "error on unmarshal of config\n", err) } } } diff --git a/cli/command/root/login.go b/cli/command/root/login.go index 6e314ba..bad356d 100644 --- a/cli/command/root/login.go +++ b/cli/command/root/login.go @@ -46,13 +46,13 @@ var loginCmd = &cobra.Command{ _client, err := GetClient(deviceCfg, nil) if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), "error on login", err) + _, _ = fmt.Fprintln(cmd.ErrOrStderr(), "error on login", err) return } if _client != nil { deviceInfo, err := _client.DeviceInfo() if err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), "error on getting device information", err) + _, _ = fmt.Fprintln(cmd.ErrOrStderr(), "error on getting device information", err) return } // update device info @@ -76,8 +76,8 @@ var loginCmd = &cobra.Command{ AddDevice(deviceCfg) WriteConfigFile() - fmt.Fprintln(cmd.OutOrStdout(), "Login successful.") - fmt.Fprintf(cmd.OutOrStdout(), "%+v\n", deviceInfo) + _, _ = fmt.Fprintln(cmd.OutOrStdout(), "Login successful.") + _, _ = fmt.Fprintf(cmd.OutOrStdout(), "%+v\n", deviceInfo) } }, } @@ -92,7 +92,7 @@ var logoutCmd = &cobra.Command{ esphomectl logout my_device_1:6053 my_device_2:6053`, Run: func(cmd *cobra.Command, args []string) { if len(args) == 0 && CONFIG.Active == "" { - fmt.Fprintln(cmd.ErrOrStderr(), "There is no active device information.") + _, _ = fmt.Fprintln(cmd.ErrOrStderr(), "There is no active device information.") return } @@ -102,6 +102,6 @@ var logoutCmd = &cobra.Command{ } WriteConfigFile() - fmt.Fprintln(cmd.OutOrStdout(), "Logout successful.") + _, _ = fmt.Fprintln(cmd.OutOrStdout(), "Logout successful.") }, } diff --git a/examples/camera/main.go b/examples/camera/main.go index 24ed2f5..0c65a21 100644 --- a/examples/camera/main.go +++ b/examples/camera/main.go @@ -18,16 +18,20 @@ func main() { if err != nil { log.Fatalln(err) } - defer client.Close() + defer func() { _ = client.Close() }() // subscribe state changes - client.Send(&api.SubscribeStatesRequest{}) + if err := client.Send(&api.SubscribeStatesRequest{}); err != nil { + log.Fatalln(err) + } // wait for a second <-time.After(1 * time.Second) // take a picture - client.Send(&api.CameraImageRequest{Single: true}) + if err := client.Send(&api.CameraImageRequest{Single: true}); err != nil { + log.Fatalln(err) + } // wait 10 seconds <-time.After(3 * time.Second) diff --git a/examples/device_info/main.go b/examples/device_info/main.go index 6d025b4..119cdea 100644 --- a/examples/device_info/main.go +++ b/examples/device_info/main.go @@ -12,7 +12,7 @@ func main() { if err != nil { log.Fatalln(err) } - defer client.Close() + defer func() { _ = client.Close() }() err = client.Ping() if err != nil { diff --git a/examples/tail_logs/main.go b/examples/tail_logs/main.go index 1d7dd29..4ce4c9d 100644 --- a/examples/tail_logs/main.go +++ b/examples/tail_logs/main.go @@ -20,7 +20,7 @@ func main() { if err != nil { log.Fatalln(err) } - defer client.Close() + defer func() { _ = client.Close() }() fmt.Println("Listening logs, will terminate in", *monitoringDuration) diff --git a/pkg/client/client.go b/pkg/client/client.go index 3e64300..94adb6a 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -119,8 +119,10 @@ func (c *Client) Login(password string) error { return err } + // AuthenticationRequest/Response are deprecated in api.proto (ESPHome 2026.1.0+) + // but still required for pre-2026.1 devices that use api password. message, err := c.SendAndWaitForResponse( - &api.AuthenticationRequest{Password: password}, + &api.AuthenticationRequest{Password: password}, //nolint:staticcheck // SA1019: legacy password auth api.AuthenticationResponseTypeID, ) if err != nil { @@ -130,7 +132,7 @@ func (c *Client) Login(password string) error { } return err } - authResponse, ok := message.(*api.AuthenticationResponse) + authResponse, ok := message.(*api.AuthenticationResponse) //nolint:staticcheck // SA1019: legacy password auth if !ok { return fmt.Errorf("invalid response type:%T", message) } @@ -168,7 +170,7 @@ func (c *Client) DeviceInfo() (*types.DeviceInfo, error) { info := message.(*api.DeviceInfoResponse) di := &types.DeviceInfo{ - UsesPassword: info.UsesPassword, + UsesPassword: info.UsesPassword, //nolint:staticcheck // SA1019: still reported by older firmware Name: info.Name, MacAddress: info.MacAddress, EsphomeVersion: info.EsphomeVersion, @@ -248,7 +250,7 @@ func (c *Client) NoiseEncryptionSetKey(key []byte) (*api.NoiseEncryptionSetKeyRe // messageReader reads message from the node func (c *Client) messageReader() { - defer c.conn.Close() + defer func() { _ = c.conn.Close() }() for { select { case <-c.stopChan: @@ -295,7 +297,7 @@ func (c *Client) isExternal(message proto.Message) bool { switch message.(type) { case *api.HelloResponse, - *api.AuthenticationResponse, + *api.AuthenticationResponse, //nolint:staticcheck // SA1019: filter legacy auth replies *api.DisconnectResponse, *api.PingResponse, *api.DeviceInfoResponse, From ecf0f54164daca0ccd749b3cee8aac0deccdd8d4 Mon Sep 17 00:00:00 2001 From: Jeeva Kandasamy Date: Sat, 18 Jul 2026 08:32:55 +0530 Subject: [PATCH 4/4] bump go version and fix lint issue Signed-off-by: Jeeva Kandasamy --- .github/workflows/publish_executables.yaml | 11 ++++++----- go.mod | 2 +- pkg/api/helper.go | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/publish_executables.yaml b/.github/workflows/publish_executables.yaml index c682b98..1ab4774 100644 --- a/.github/workflows/publish_executables.yaml +++ b/.github/workflows/publish_executables.yaml @@ -10,14 +10,15 @@ jobs: steps: - name: checkout the source code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - uses: actions/setup-go@v2 + - name: Set up Go + uses: actions/setup-go@v5 with: - go-version: ^1.21 + go-version-file: go.mod - name: Cache go modules - uses: actions/cache@v2 + uses: actions/cache@v6 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} @@ -37,7 +38,7 @@ jobs: - name: update release notes and executables if: startsWith(github.ref, 'refs/tags/') # executes only for new release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v3 env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} with: diff --git a/go.mod b/go.mod index b8dae61..1139ab9 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/mycontroller-org/esphome_api -go 1.25 +go 1.26 require ( github.com/flynn/noise v1.0.1-0.20220214164934-d803f5c4b0f4 diff --git a/pkg/api/helper.go b/pkg/api/helper.go index c3b1fc2..2cf4080 100644 --- a/pkg/api/helper.go +++ b/pkg/api/helper.go @@ -165,7 +165,7 @@ func TypeID(message interface{}) uint64 { } // convert from pointer to normal type - if reflect.ValueOf(message).Kind() == reflect.Ptr { + if reflect.ValueOf(message).Kind() == reflect.Pointer { message = reflect.ValueOf(message).Elem().Interface() } switch message.(type) {