summaryrefslogtreecommitdiffstats
path: root/krebs/2configs/shack/glados/lib/default.nix
blob: 2cfac3daf7bb8d1e5a3113523b2f9d8f4df0060d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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;
    };
  };
}