Skip to content

Commit c8f149c

Browse files
committed
feat: Core-API enhancements for new voice assistant entity
Initial definition of the new voice_assistant entity. This is used to start a first proof of concept implementation and for verifying the functionality. Integration-API enhancement with streaming audio for voice-assistant feature. The voice stream is sent over the same WebSocket connection, but using binary WebSocket messages with protocol buffers. Protobuf allows future enhancements if other binary data needs to be exchanged. Core-API enhancements: - New entity type voice_assistant - New event: `assistant_event` - Data models for voice assistant functionality - Refactored CfgVoiceControl data model for /cfg/voice_control and /cfg/voice_control/voice_assistants endpoints. - Refactored CfgAll model: voice_control -> voice - Available entity from integration can now include an icon Integration-API enhancements: - New entity type voice_assistant - New event: `assistant_event` - Data models for voice assistant functionality
1 parent ff61701 commit c8f149c

14 files changed

Lines changed: 1275 additions & 49 deletions

.github/workflows/asyncapi.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ jobs:
6565
- name: Generate integration AsyncAPI HTML doc
6666
run: |
6767
ag ./integration-api/UCR-integration-asyncapi.yaml @asyncapi/html-template -o ./static/api/integration --force-write
68+
cp ./integration-api/*.proto ./static/api/integration/
6869
6970
- name: Generate dock AsyncAPI HTML doc
7071
run: |

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ _Changes in the next release_
2222
- New `sensor` widget for the activity user interface.
2323
- Media-player entity: new attribute `media_position_updated_at`.
2424
- Dock 3 external port configuration.
25+
- Voice Assistant support.
2526

2627
---
2728

core-api/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ in YAML format.
2525

2626
## API Versions
2727

28-
| UCR2 Firmware | Core Simulator | REST API | WS API |
28+
| UCR Firmware | Core Simulator | REST API | WS API |
2929
|---------------|----------------|----------|--------|
30+
| 2.8.0-beta | 0.66.4 | 0.43.1 | 0.33.0 |
3031
| 2.7.2-beta | 0.65.1 | 0.42.0 | 0.32.0 |
3132
| 2.6.2-beta | 0.62.0 | 0.40.0 | 0.31.0 |
3233
| 2.6.0-beta | 0.61.5 | 0.39.4 | 0.30.2 |

core-api/rest/CHANGELOG.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88

99
This section contains unreleased changes which will be part of an upcoming release.
1010

11+
---
12+
13+
## 0.43.1
1114
### Added
1215
- Touch slider configuration in an activity.
1316
- Voice assistant configuration in an activity.
17+
- New entity type `voice_assistant`.
1418

15-
---
19+
### Changed
20+
- Refactored `CfgVoiceControl` data model for `/cfg/voice_control` and `/cfg/voice_control/voice_assistants` endpoints.
21+
- Refactored `CfgAll` model: `voice_control` -> `voice`
22+
- Available entity from integration can now include an icon
1623

1724
## 0.41.1
1825
### Added

core-api/rest/UCR-core-openapi.yaml

Lines changed: 169 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
openapi: 3.0.3
22
info:
33
title: Remote Two/3 REST Core-API
4-
version: 0.42.0
4+
version: 0.43.0
55
contact:
66
name: API Support
77
url: 'https://github.com/unfoldedcircle/core-api/issues'
@@ -7816,13 +7816,15 @@ paths:
78167816
- cfg
78177817
summary: Modify voice control settings.
78187818
description: |
7819-
Change one or multiple voice control settings.
7819+
Change one or multiple voice control settings. A missing field will in the request object will keep the old value.
7820+
7821+
If the specified voice control entity does not exist, the voice assistant configuration will be removed.
78207822
operationId: updateVoiceControlSettings
78217823
requestBody:
78227824
content:
78237825
application/json:
78247826
schema:
7825-
$ref: '#/components/schemas/CfgVoiceControl'
7827+
$ref: '#/components/schemas/CfgVoiceControlUpdate'
78267828
required: true
78277829
responses:
78287830
'200':
@@ -7838,20 +7840,38 @@ paths:
78387840
'403':
78397841
$ref: '#/components/responses/Err403Forbidden'
78407842
/cfg/voice_control/voice_assistants:
7843+
head:
7844+
tags:
7845+
- cfg
7846+
summary: Get total number of voice assistants.
7847+
operationId: getVoiceAssistantCount
7848+
responses:
7849+
'200':
7850+
description: Successful operation.
7851+
headers:
7852+
Pagination-Count:
7853+
description: Total number of items.
7854+
schema:
7855+
type: integer
7856+
'401':
7857+
$ref: '#/components/responses/Err401Unauthorized'
7858+
'403':
7859+
$ref: '#/components/responses/Err403Forbidden'
78417860
get:
78427861
tags:
78437862
- cfg
78447863
summary: Get available voice assistants.
7864+
parameters:
7865+
- $ref: '#/components/parameters/page'
7866+
- $ref: '#/components/parameters/limit'
78457867
operationId: getVoiceAssistants
78467868
responses:
78477869
'200':
78487870
description: Successful operation
78497871
content:
78507872
application/json:
78517873
schema:
7852-
type: array
7853-
items:
7854-
type: string
7874+
$ref: '#/components/schemas/VoiceAssistants'
78557875
'401':
78567876
$ref: '#/components/responses/Err401Unauthorized'
78577877
'403':
@@ -11480,7 +11500,13 @@ components:
1148011500
type: string
1148111501
description: Status message describing the result or error. This message is intended for error analysis and should not directly shown to the end user.
1148211502
AvailableEntity:
11483-
description: Provided entity from an integration which can be configured to be used in the remote.
11503+
description: |
11504+
Provided entity from an integration which can be configured to be used in the remote.
11505+
11506+
See [entity documentation](https://github.com/unfoldedcircle/core-api/blob/main/doc/entities/)
11507+
for more information.
11508+
11509+
If no icon identifier is specified, the default icon for the entity type is used.
1148411510
type: object
1148511511
properties:
1148611512
entity_id:
@@ -11498,6 +11524,8 @@ components:
1149811524
type: string
1149911525
name:
1150011526
$ref: '#/components/schemas/LanguageText'
11527+
icon:
11528+
$ref: '#/components/schemas/IconIdentifier'
1150111529
features:
1150211530
description: |
1150311531
Supported features of the entity. See entity documentation for available features.
@@ -11689,7 +11717,7 @@ components:
1168911717
$ref: '#/components/schemas/CfgSoftwareUpdate'
1169011718
sound:
1169111719
$ref: '#/components/schemas/CfgSound'
11692-
voice_control:
11720+
voice:
1169311721
$ref: '#/components/schemas/CfgVoiceControl'
1169411722
restart_required:
1169511723
description: A configuration change requires a restart.
@@ -12080,6 +12108,9 @@ components:
1208012108
- enabled
1208112109
- volume
1208212110
CfgVoiceControl:
12111+
description: |
12112+
Voice control settings with enriched voice assistant configuration.
12113+
No voice assistant is enabled if the `voice_assistant.active` object is missing.
1208312114
type: object
1208412115
properties:
1208512116
microphone:
@@ -12088,15 +12119,52 @@ components:
1208812119
with the remote or integrations.
1208912120
type: boolean
1209012121
voice_assistant:
12091-
description: |
12092-
The main voice assistant to use for voice control, if no other voice assistant is configured for a specific
12093-
screen, for example in an activity.
12094-
- `None`: no voice assistant is enabled.
12095-
type: string
12096-
default: None
12122+
$ref: '#/components/schemas/CfgVoiceAssistant'
1209712123
required:
1209812124
- microphone
1209912125
- voice_assistant
12126+
CfgVoiceAssistant:
12127+
description: |
12128+
The main voice assistant to use for voice control, if no other voice assistant is configured for a specific
12129+
screen, for example, in an activity.
12130+
type: object
12131+
properties:
12132+
active:
12133+
$ref: '#/components/schemas/VoiceAssistant'
12134+
profile_id:
12135+
$ref: '#/components/schemas/SimpleId'
12136+
speech_response:
12137+
description: Enable speech response if supported by the voice assistant. Disabled by default.
12138+
type: boolean
12139+
default: false
12140+
CfgVoiceControlUpdate:
12141+
description: |
12142+
Update object for voice control settings. A missing field will keep the old value.
12143+
type: object
12144+
properties:
12145+
microphone:
12146+
description: |
12147+
Enable microphone. Disabling the microphone will completely turn it off. Voice control and dictation won't work
12148+
with the remote or integrations.
12149+
type: boolean
12150+
voice_assistant:
12151+
$ref: '#/components/schemas/CfgVoiceAssistantUpdate'
12152+
CfgVoiceAssistantUpdate:
12153+
description: |
12154+
The main voice assistant to use for voice control, if no other voice assistant is configured for a specific
12155+
screen, for example, in an activity.
12156+
type: object
12157+
properties:
12158+
entity_id:
12159+
description: 'Voice assistant entity id to use, empty for removing a configured voice assistant.'
12160+
type: string
12161+
profile_id:
12162+
$ref: '#/components/schemas/SimpleId'
12163+
speech_response:
12164+
description: Enable speech response if supported by the voice assistant. Disabled by default.
12165+
type: boolean
12166+
required:
12167+
- entity_id
1210012168
CommandSequence:
1210112169
description: Sequence of commands to execute.
1210212170
type: array
@@ -12917,7 +12985,10 @@ components:
1291712985
$ref: '#/components/schemas/Entity'
1291812986
Entity:
1291912987
description: |
12920-
Configured entity in the remote to be used in one or more profiles.
12988+
Configured entity in the remote to be used in one or more user profiles.
12989+
12990+
See [entity documentation](https://github.com/unfoldedcircle/core-api/blob/main/doc/entities/)
12991+
for more information.
1292112992
type: object
1292212993
properties:
1292312994
entity_id:
@@ -13174,6 +13245,7 @@ components:
1317413245
- macro
1317513246
- remote
1317613247
- ir_emitter
13248+
- voice_assistant
1317713249
ExternalSystems:
1317813250
type: array
1317913251
items:
@@ -15861,6 +15933,88 @@ components:
1586115933
$ref: '#/components/schemas/SimpleId'
1586215934
required:
1586315935
- entity_id
15936+
VoiceAssistants:
15937+
type: array
15938+
items:
15939+
$ref: '#/components/schemas/VoiceAssistant'
15940+
VoiceAssistant:
15941+
description: |
15942+
Voice assistant definition.
15943+
15944+
This is a tailored representation of the voice_assistant entity, which can be used to display voice assistant
15945+
information to users.
15946+
15947+
- `profiles` specify optional parameters that can be used by starting a voice command.
15948+
- `features` are the default features supported by the voice assistant.
15949+
If multiple profiles are supported, this should be the feature list of the preferred profile.
15950+
- `preferred_profile` is the preferred profile specified by the integration.
15951+
The user can select another default profile in the voice assistant settings.
15952+
type: object
15953+
properties:
15954+
entity_id:
15955+
$ref: '#/components/schemas/EntityId'
15956+
name:
15957+
$ref: '#/components/schemas/LanguageText'
15958+
icon:
15959+
$ref: '#/components/schemas/IconIdentifier'
15960+
state:
15961+
type: string
15962+
features:
15963+
$ref: '#/components/schemas/VoiceAssistantFeatures'
15964+
profiles:
15965+
$ref: '#/components/schemas/VoiceAssistantProfiles'
15966+
preferred_profile:
15967+
$ref: '#/components/schemas/SimpleId'
15968+
required:
15969+
- entity_id
15970+
- name
15971+
VoiceAssistantFeatures:
15972+
type: array
15973+
items:
15974+
$ref: '#/components/schemas/VoiceAssistantFeature'
15975+
VoiceAssistantFeature:
15976+
description: |
15977+
Supported voice assistant or profile features.
15978+
- transcription: Supports voice command transcription.
15979+
- response_text: Supports textual response about the performed action.
15980+
- response_speech: Supports speech response about the performed action.
15981+
type: string
15982+
enum:
15983+
- transcription
15984+
- response_text
15985+
- response_speech
15986+
VoiceAssistantProfiles:
15987+
type: array
15988+
items:
15989+
$ref: '#/components/schemas/VoiceAssistantProfile'
15990+
VoiceAssistantProfile:
15991+
description: |
15992+
Profiles are optional and allow parameterizing voice input. A regular voice-capable device usually just accepts voice
15993+
input without additional parameters. Home automation systems can offer multi-language support or an option to use
15994+
local or cloud processing.
15995+
15996+
For example, Home Assistant allows configuring multiple Assist pipelines for voice commands.
15997+
These pipelines can offer different languages or speech recognition engines.
15998+
15999+
- `language` is an optional language code if the profile represents a specific language for speech recognition.
16000+
- `features` is optional and overwrites the voice assistant features, for example, if a profile has less or more features.
16001+
- An empty `features` array means "no features".
16002+
type: object
16003+
properties:
16004+
id:
16005+
$ref: '#/components/schemas/SimpleId'
16006+
name:
16007+
description: Friendly name to show in UI.
16008+
type: string
16009+
minLength: 1
16010+
maxLength: 50
16011+
language:
16012+
$ref: '#/components/schemas/LanguageCode'
16013+
features:
16014+
$ref: '#/components/schemas/VoiceAssistantFeatures'
16015+
required:
16016+
- id
16017+
- name
1586416018
ApScanStatus:
1586516019
type: object
1586616020
properties:

core-api/websocket/CHANGELOG.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88

99
This section contains unreleased changes which will be part of an upcoming release.
1010

11-
### Changed
12-
- Initial voice assistant configuration refactoring.
13-
1411
---
1512

13+
## 0.33.0-beta
14+
### Changed
15+
- Voice assistant configuration refactoring.
16+
### Added
17+
- New entity type `voice_assistant`.
18+
- New event: `assistant_event`.
19+
1620
## 0.31.0-beta
1721
### Added
1822
- New `reset_network_cfg` message.

0 commit comments

Comments
 (0)