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.${entity}"; } { service = "media_player.play_media"; data = { entity_id = "media_player.${entity}"; media_content_type = "playlist"; media_content_id = "ansage"; }; } { service = "media_player.turn_on"; data.entity_id = "media_player.${entity}"; } { delay.seconds = 4.5; } { service = "tts.say"; entity_id = "media_player.${entity}"; data_template = { inherit message; language = "de"; }; } ]; in { lounge = message: tts { inherit message; entity = "lounge"; }; herrenklo = message: tts { inherit message; entity = "herrenklo"; }; kiosk = message: tts { inherit message; entity = "kiosk"; }; }; tasmota = { plug = {host, name ? host, topic ? host}: { platform = "mqtt"; inherit name; state_topic = "sonoff/stat/${topic}/POWER1"; command_topic = "sonoff/cmnd/${topic}/POWER1"; availability_topic = "sonoff/tele/${topic}/LWT"; payload_on= "ON"; payload_off= "OFF"; payload_available= "Online"; payload_not_available= "Offline"; retain = false; qos = 1; }; }; }