summaryrefslogtreecommitdiffstats
path: root/krebs/2configs/shack/glados
diff options
context:
space:
mode:
Diffstat (limited to 'krebs/2configs/shack/glados')
-rw-r--r--krebs/2configs/shack/glados/automation/hass-restart.nix3
-rw-r--r--krebs/2configs/shack/glados/automation/shack-startup.nix82
-rw-r--r--krebs/2configs/shack/glados/default.nix13
-rw-r--r--krebs/2configs/shack/glados/lib/default.nix40
4 files changed, 135 insertions, 3 deletions
diff --git a/krebs/2configs/shack/glados/automation/hass-restart.nix b/krebs/2configs/shack/glados/automation/hass-restart.nix
index e87354978..1b380204d 100644
--- a/krebs/2configs/shack/glados/automation/hass-restart.nix
+++ b/krebs/2configs/shack/glados/automation/hass-restart.nix
@@ -6,12 +6,13 @@
platform = "homeassistant";
event = "start";
};
+ # trigger good/bad air
action = [
{ service = "light.turn_on";
data = {
entity_id = "light.fablab_led";
effect = "Rainbow";
- color_name = "yellow";
+ color_name = "purple";
};
}
];
diff --git a/krebs/2configs/shack/glados/automation/shack-startup.nix b/krebs/2configs/shack/glados/automation/shack-startup.nix
new file mode 100644
index 000000000..10051d60a
--- /dev/null
+++ b/krebs/2configs/shack/glados/automation/shack-startup.nix
@@ -0,0 +1,82 @@
+# needs:
+# binary_sensor.portal_lock
+# sensor.keyholder
+# media_player.lounge
+let
+ glados = import ../lib;
+in
+[
+ {
+ alias = "Greet new keyholder for key exchange";
+ initial_state = true;
+ trigger = {
+ platform = "state";
+ entity_id = "sensor.keyholder";
+ };
+ condition = {
+ condition = "template";
+ value_template = "{{ trigger.from_state.state != 'No Keyholder' }}";
+ };
+ #action = glados.say.lounge "Danke {{trigger.to_state.state}} für das Übernehmen des Keys von {{trigger.from_state.state}}";
+ action = [];
+ }
+
+ {
+ alias = "Start Music on portal lock on";
+ # TODO: use "power" trigger
+ trigger = {
+ platform = "state";
+ entity_id = "binary_sensor.portal_lock";
+ to = "on";
+ for.seconds = 30;
+ };
+ condition = {
+ condition = "and";
+ conditions =
+ [
+ { # only start if a keyholder opened the door and if the lounge mpd is currently not playing anything
+ condition = "template";
+ value_template = "{{ state('sensor.keyholder') != 'No Keyholder' }}";
+ }
+ {
+ condition = "state";
+ entity_id = "media_player.lounge";
+ state = "idle";
+ }
+ ];
+ };
+ action = [
+ {
+ service = "media_player.volume_set";
+ data = {
+ entity_id = "media_player.lounge";
+ volume_level = 1.0;
+ };
+ }
+ {
+ service = "media_player.play_media";
+ data = {
+ entity_id = "media_player.lounge";
+ media_content_type = "playlist";
+ media_content_id = "ansage";
+ };
+ }
+ { delay.seconds = 8; }
+ {
+ service = "media_player.volume_set";
+ data = {
+ entity_id = "media_player.lounge";
+ volume_level = 0.6;
+ };
+ }
+ {
+ service = "media_player.play_media";
+ data = {
+ entity_id = "media_player.lounge";
+ media_content_type = "playlist";
+ media_content_id = "lassulus superradio";
+ };
+ }
+ ];
+ }
+]
diff --git a/krebs/2configs/shack/glados/default.nix b/krebs/2configs/shack/glados/default.nix
index e48a54551..ef22ccb0d 100644
--- a/krebs/2configs/shack/glados/default.nix
+++ b/krebs/2configs/shack/glados/default.nix
@@ -93,6 +93,7 @@ in {
light = badair.light;
media_player = [
{ platform = "mpd";
+ name = "lounge";
host = "lounge.mpd.shack";
}
];
@@ -117,19 +118,27 @@ in {
#conversation = {};
history = {};
logbook = {};
+ logger = {
+ default = "info";
+ };
recorder = {};
tts = [
{ platform = "google_translate";
+ service_name = "say";
language = "de";
+ cache = true;
+ time_memory = 57600;
}
#{ platform = "picotts";
# language = "de-DE";
+ # service_name = "say";
#}
];
sun = {};
- automation = wasser.automation
- ++ badair.automation
+ automation = wasser.automation
+ ++ badair.automation
+ ++ (import ./automation/shack-startup.nix)
++ (import ./automation/hass-restart.nix);
device_tracker = [];
diff --git a/krebs/2configs/shack/glados/lib/default.nix b/krebs/2configs/shack/glados/lib/default.nix
index 6737af842..16cbc6830 100644
--- a/krebs/2configs/shack/glados/lib/default.nix
+++ b/krebs/2configs/shack/glados/lib/default.nix
@@ -2,6 +2,46 @@ let
prefix = "glados";
in
{
+
+ say = let
+ # returns a list of actions to be performed on an mpd to say something
+ tts = { message, entity }:
+ [
+ {
+ service = "media_player.turn_on";
+ data.entity_id = "media_player.lounge";
+ }
+ { service = "media_player.play_media";
+ data = {
+ entity_id = "media_player.lounge";
+ media_content_type = "playlist";
+ media_content_id = "ansage";
+ };
+ }
+ {
+ service = "media_player.turn_on";
+ data.entity_id = "media_player.lounge";
+ }
+ { delay.seconds = 8; }
+ { service = "tts.say";
+ entity_id = "media_player.lounge";
+ data_template = {
+ inherit message;
+ language = "de";
+ };
+ }
+ ];
+ in
+ {
+ lounge = message: tts {
+ inherit message;
+ entity = "lounge";
+ };
+ herrenklo = message: tts {
+ inherit message;
+ entity = "herrenklo";
+ };
+ };
esphome =
{
temp = {host, topic ? "temperature" }: