Skip to content

Commit

Permalink
feat: Add microphone_connect action
Browse files Browse the repository at this point in the history
  • Loading branch information
felipecrs authored and Felipe Santos committed Sep 15, 2024
1 parent e13e53b commit bf23acd
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 25 deletions.
9 changes: 9 additions & 0 deletions docs/configuration/actions/custom/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,15 @@ action: custom:frigate-card-action
frigate_card_action: menu_toggle
```

## `microphone_connect`

Connect the microphone for [2-way audio](../../../usage/2-way-audio.md).

```yaml
action: custom:frigate-card-action
frigate_card_action: microphone_connect
```

## `microphone_disconnect`

Disconnect the microphone during [2-way audio](../../../usage/2-way-audio.md).
Expand Down
50 changes: 25 additions & 25 deletions docs/usage/url-actions.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,31 +46,31 @@ unless the action is targeted with a `CARD_ID` as shown above.

Only a subset of all [actions](../configuration/actions/README.md) are supported in URL form.

| Action | Supported in URL | Explanation |
| --------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------- |
| `camera_select` | :white_check_mark: | |
| `camera_ui` | :white_check_mark: | |
| `clip` | :white_check_mark: | |
| `clips` | :white_check_mark: | |
| `default` | :white_check_mark: | |
| `download` | :heavy_multiplication_x: | Latest media information is not available on initial render. |
| `expand` | :white_check_mark: | |
| `fullscreen` | :heavy_multiplication_x: | Javascript does not support activating fullscreen without direct human interaction. Use `expand` as an alternative. |
| `image` | :white_check_mark: | |
| `live_substream_select` | :white_check_mark: | |
| `live` | :white_check_mark: | |
| `media_player` | :heavy_multiplication_x: | Please [request](https://github.com/dermotduffy/frigate-hass-card/issues) if you need this. |
| `menu_toggle` | :white_check_mark: | |
| `microphone_disconnect`, `microphone_mute`, `microphone_unmute` | :heavy_multiplication_x: | |
| `mute`, `unmute` | :heavy_multiplication_x: | |
| `play`, `pause` | :heavy_multiplication_x: | |
| `ptz` | :heavy_multiplication_x: | Please [request](https://github.com/dermotduffy/frigate-hass-card/issues) if you need this. |
| `recording` | :white_check_mark: | |
| `recordings` | :white_check_mark: | |
| `screenshot` | :heavy_multiplication_x: | Latest media information is not available on initial render. |
| `ptz_controls` | :heavy_multiplication_x: | Please [request](https://github.com/dermotduffy/frigate-hass-card/issues) if you need this. |
| `snapshot` | :white_check_mark: | |
| `snapshots` | :white_check_mark: | |
| Action | Supported in URL | Explanation |
| ------------------------------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------- |
| `camera_select` | :white_check_mark: | |
| `camera_ui` | :white_check_mark: | |
| `clip` | :white_check_mark: | |
| `clips` | :white_check_mark: | |
| `default` | :white_check_mark: | |
| `download` | :heavy_multiplication_x: | Latest media information is not available on initial render. |
| `expand` | :white_check_mark: | |
| `fullscreen` | :heavy_multiplication_x: | Javascript does not support activating fullscreen without direct human interaction. Use `expand` as an alternative. |
| `image` | :white_check_mark: | |
| `live_substream_select` | :white_check_mark: | |
| `live` | :white_check_mark: | |
| `media_player` | :heavy_multiplication_x: | Please [request](https://github.com/dermotduffy/frigate-hass-card/issues) if you need this. |
| `menu_toggle` | :white_check_mark: | |
| `microphone_connect`, `microphone_disconnect`, `microphone_mute`, `microphone_unmute` | :heavy_multiplication_x: | |
| `mute`, `unmute` | :heavy_multiplication_x: | |
| `play`, `pause` | :heavy_multiplication_x: | |
| `ptz` | :heavy_multiplication_x: | Please [request](https://github.com/dermotduffy/frigate-hass-card/issues) if you need this. |
| `recording` | :white_check_mark: | |
| `recordings` | :white_check_mark: | |
| `screenshot` | :heavy_multiplication_x: | Latest media information is not available on initial render. |
| `ptz_controls` | :heavy_multiplication_x: | Please [request](https://github.com/dermotduffy/frigate-hass-card/issues) if you need this. |
| `snapshot` | :white_check_mark: | |
| `snapshots` | :white_check_mark: | |

## Examples

Expand Down
9 changes: 9 additions & 0 deletions src/card-controller/actions/actions/microphone-connect.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { GeneralActionConfig } from '../../../config/types';
import { CardActionsAPI } from '../../types';
import { FrigateCardAction } from './base';

export class MicrophoneConnectAction extends FrigateCardAction<GeneralActionConfig> {
public async execute(api: CardActionsAPI): Promise<void> {
api.getMicrophoneManager().connect();
}
}
3 changes: 3 additions & 0 deletions src/card-controller/actions/factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { GenericAction } from './actions/generic';
import { LogAction } from './actions/log';
import { MediaPlayerAction } from './actions/media-player';
import { MenuToggleAction } from './actions/menu-toggle';
import { MicrophoneConnectAction } from './actions/microphone-connect';
import { MicrophoneDisconnectAction } from './actions/microphone-disconnect';
import { MicrophoneMuteAction } from './actions/microphone-mute';
import { MicrophoneUnmuteAction } from './actions/microphone-unmute';
Expand Down Expand Up @@ -97,6 +98,8 @@ export class ActionFactory {
return new SubstreamOnAction(context, frigateCardAction, options?.config);
case 'media_player':
return new MediaPlayerAction(context, frigateCardAction, options?.config);
case 'microphone_connect':
return new MicrophoneConnectAction(context, frigateCardAction, options?.config);
case 'microphone_disconnect':
return new MicrophoneDisconnectAction(
context,
Expand Down
1 change: 1 addition & 0 deletions src/config/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,7 @@ const FRIGATE_CARD_GENERAL_ACTIONS = [
'live_substream_off',
'live_substream_on',
'menu_toggle',
'microphone_connect',
'microphone_disconnect',
'microphone_mute',
'microphone_unmute',
Expand Down
18 changes: 18 additions & 0 deletions tests/card-controller/actions/actions/microphone-connect.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { expect, it } from 'vitest';
import { MicrophoneConnectAction } from '../../../../src/card-controller/actions/actions/microphone-connect';
import { createCardAPI } from '../../../test-utils';

it('should handle microphone_connect action', async () => {
const api = createCardAPI();
const action = new MicrophoneConnectAction(
{},
{
action: 'fire-dom-event',
frigate_card_action: 'microphone_connect',
},
);

await action.execute(api);

expect(api.getMicrophoneManager().connect).toBeCalled();
});
2 changes: 2 additions & 0 deletions tests/card-controller/actions/factory.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { GenericAction } from '../../../src/card-controller/actions/actions/gene
import { LogAction } from '../../../src/card-controller/actions/actions/log';
import { MediaPlayerAction } from '../../../src/card-controller/actions/actions/media-player';
import { MenuToggleAction } from '../../../src/card-controller/actions/actions/menu-toggle';
import { MicrophoneConnectAction } from '../../../src/card-controller/actions/actions/microphone-connect';
import { MicrophoneDisconnectAction } from '../../../src/card-controller/actions/actions/microphone-disconnect';
import { MicrophoneMuteAction } from '../../../src/card-controller/actions/actions/microphone-mute';
import { MicrophoneUnmuteAction } from '../../../src/card-controller/actions/actions/microphone-unmute';
Expand Down Expand Up @@ -104,6 +105,7 @@ describe('ActionFactory', () => {
MediaPlayerAction,
],
[{ frigate_card_action: 'menu_toggle' as const }, MenuToggleAction],
[{ frigate_card_action: 'microphone_connect' as const }, MicrophoneConnectAction],
[
{ frigate_card_action: 'microphone_disconnect' as const },
MicrophoneDisconnectAction,
Expand Down

0 comments on commit bf23acd

Please sign in to comment.