feat(hass): add bluetooth speaker control
All checks were successful
Discord / discord commits (push) Has been skipped

This commit is contained in:
matt1432 2024-09-10 01:21:08 -04:00
parent 06d9119ded
commit 100e93bbdd
3 changed files with 73 additions and 5 deletions

View file

@ -0,0 +1,56 @@
{...}: {
# Setup Bluetooth
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
settings = {
General = {
DiscoverableTimeout = 0;
Experimental = true;
KernelExperimental = true;
};
Policy.AutoEnable = "true";
};
};
# Have pulseaudio.service itself start at boot but after bluetooth
# so bluetooth accepts sound connections from the start.
systemd.user.services.pulseaudio.after = ["bluetooth.service"];
systemd.user.targets.default.wants = ["pulseaudio.service"];
# Allow pulseaudio to be managed by MPD
hardware.pulseaudio = {
enable = true;
extraConfig = ''
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
'';
};
# Setup MPD
services = {
home-assistant.extraComponents = [
"mpd"
];
mpd = {
enable = true;
network = {
listenAddress = "127.0.0.1";
port = 6600;
};
extraConfig = ''
audio_output {
type "pulse"
name "UE Boom 2"
sink "bluez_sink.88_C6_26_93_4B_77.a2dp_sink"
server "127.0.0.1"
}
'';
};
};
}

View file

@ -1,6 +1,7 @@
{...}: { {...}: {
imports = [ imports = [
./assist.nix ./assist.nix
./bluetooth.nix
./firmware.nix ./firmware.nix
./frontend.nix ./frontend.nix
]; ];
@ -13,6 +14,7 @@
"caldav" "caldav"
"holiday" "holiday"
"isal" "isal"
"led_ble"
"met" "met"
"spotify" "spotify"
"upnp" "upnp"

View file

@ -138,7 +138,6 @@
platform = "template"; platform = "template";
restore_mode = "RESTORE_DEFAULT_ON"; restore_mode = "RESTORE_DEFAULT_ON";
on_turn_off = ["voice_assistant.stop" {lambda = "id(va).set_use_wake_word(false);";} {"script.execute" = "reset_led";}];
on_turn_on = [ on_turn_on = [
{lambda = "id(va).set_use_wake_word(true);";} {lambda = "id(va).set_use_wake_word(true);";}
{ {
@ -149,7 +148,14 @@
} }
{"script.execute" = "reset_led";} {"script.execute" = "reset_led";}
]; ];
on_turn_off = [
"voice_assistant.stop"
{lambda = "id(va).set_use_wake_word(false);";}
{"script.execute" = "reset_led";}
];
} }
{ {
id = "use_listen_light"; id = "use_listen_light";
name = "Use listen light"; name = "Use listen light";
@ -159,9 +165,10 @@
platform = "template"; platform = "template";
restore_mode = "RESTORE_DEFAULT_ON"; restore_mode = "RESTORE_DEFAULT_ON";
on_turn_off = [{"script.execute" = "reset_led";}];
on_turn_on = [{"script.execute" = "reset_led";}]; on_turn_on = [{"script.execute" = "reset_led";}];
on_turn_off = [{"script.execute" = "reset_led";}];
} }
{ {
id = "timer_ringing"; id = "timer_ringing";
@ -207,7 +214,10 @@
{ {
"if" = { "if" = {
condition = "voice_assistant.is_running"; condition = "voice_assistant.is_running";
"then" = [{"voice_assistant.stop" = {};} {"script.execute" = "reset_led";}]; "then" = [
{"voice_assistant.stop" = {};}
{"script.execute" = "reset_led";}
];
"else" = [{"voice_assistant.start" = {};}]; "else" = [{"voice_assistant.start" = {};}];
}; };
} }
@ -239,14 +249,14 @@
external_components = [ external_components = [
{ {
source = "github://pr#5230";
components = ["esp_adf"]; components = ["esp_adf"];
refresh = "0s"; refresh = "0s";
source = "github://pr#5230";
} }
{ {
source = "github://jesserockz/esphome-components";
components = ["file"]; components = ["file"];
refresh = "0s"; refresh = "0s";
source = "github://jesserockz/esphome-components";
} }
]; ];