diff options
| -rw-r--r-- | krebs/2configs/shack/glados/automation/hass-restart.nix | 3 | ||||
| -rw-r--r-- | krebs/2configs/shack/glados/automation/shack-startup.nix | 82 | ||||
| -rw-r--r-- | krebs/2configs/shack/glados/default.nix | 13 | ||||
| -rw-r--r-- | krebs/2configs/shack/glados/lib/default.nix | 40 | 
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" }: | 
