summaryrefslogtreecommitdiffstats
path: root/makefu/2configs/bureautomation/automation/philosophische-tuer.nix
diff options
context:
space:
mode:
authormakefu <github@syntax-fehler.de>2021-03-12 20:52:14 +0100
committermakefu <github@syntax-fehler.de>2021-03-12 20:52:14 +0100
commit7c3e55fafcecf1fc2c88c99b51d0d723ef9a0bf0 (patch)
tree52c08746483809f3e0acfde1211eafdc984a8bac /makefu/2configs/bureautomation/automation/philosophische-tuer.nix
parentaa1b8ed563f9df4d6d9f4793c27e149f1e23a942 (diff)
ma bureautiomation: init philosophische tür
Diffstat (limited to 'makefu/2configs/bureautomation/automation/philosophische-tuer.nix')
-rw-r--r--makefu/2configs/bureautomation/automation/philosophische-tuer.nix108
1 files changed, 108 insertions, 0 deletions
diff --git a/makefu/2configs/bureautomation/automation/philosophische-tuer.nix b/makefu/2configs/bureautomation/automation/philosophische-tuer.nix
new file mode 100644
index 000000000..9ccb81348
--- /dev/null
+++ b/makefu/2configs/bureautomation/automation/philosophische-tuer.nix
@@ -0,0 +1,108 @@
+{ config, pkgs, lib, ... }:
+
+let
+ short_threshold = 30; #seconds
+ long_threshold = 30; #minutes
+ sensor = "binary_sensor.buerotuer_contact";
+
+ # get the list of all
+ name = "tueraudio";
+ prefix = "http://localhost:8123/local/${name}";
+ audiodir = "${config.services.home-assistant.configDir}/www/${name}";
+ recordrepo = pkgs.fetchFromGitHub {
+ owner = "makefu";
+ repo = "philosophische_tuer";
+ rev = "17544c6";
+ sha256 = "0bm0697fyf6s05c6yw6y25cyck04rlxj1dgazkq8mfqk6756v2bq";
+ };
+ samples = user: lib.mapAttrsToList
+ (file: _: ''"${prefix}/${name}/${user}/${file}"'')
+ (builtins.readDir (toString ( recordrepo+ "/recordings/${user}")));
+ random_tuerspruch = ''{{'' + (lib.concatStringsSep "," ((samples "Felix") ++ (samples "Sofia") ++ (samples "Markus"))) + ''| random}}''; # TODO read from derivation
+in
+{
+ systemd.tmpfiles.rules = [
+ "d ${audiodir} - hass hass - -"
+ ];
+
+ systemd.services.copy-philosophische-tuersounds = {
+ description = "copy philosophische tuer";
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ Type = "oneshot";
+ User = "hass";
+ WorkingDirectory = audiodir;
+ ExecStart = pkgs.writeDash "update-samples" ''
+ cp -vr ${recordrepo} ${audiodir}
+ '';
+ };
+ };
+
+ services.home-assistant.config.media_extractor = { };
+ services.home-assistant.config.script."philosophische_tuer" = {
+ alias = "Durchsage der philosophischen Tür";
+ sequence = [
+ { service = "media_player.play_media";
+ data = {
+ entity_id = "media_player.mpd";
+ media_content_type = "playlist";
+ media_content_id = "ansage";
+ };
+ }
+ { delay.seconds = 5; }
+ { service = "media_extractor.play_media";
+ entity_id = "media_player.mpd";
+ data_template = {
+ media_content_id = random_tuerspruch;
+ media_content_type = "MUSIC";
+ };
+ }
+ ];
+ };
+ services.home-assistant.config.automation =
+ [
+ {
+ alias = "Tür offen seit ${toString short_threshold} sekunden";
+ trigger =
+ { platform = "state";
+ entity_id = sensor;
+ to = "on";
+ for.seconds = 60;
+ };
+ condition = { };
+
+ action = [
+ { service = "homeassistant.turn_on";
+ entity_id = [
+ "script.philosophische_tuer"
+ ];
+ }
+ ];
+ }
+ {
+ alias = "Tür offen seit ${toString long_threshold} minuten";
+ trigger =
+ { platform = "state";
+ entity_id = sensor;
+ to = "on";
+ for.minutes = long_threshold;
+ };
+ condition = { };
+
+ action = [
+ { service = "homeassistant.turn_on";
+ entity_id = [
+ "script.philosophische_tuer"
+ ];
+ }
+ { service = "tts.google_say";
+ entity_id = "media_player.mpd";
+ data_template = {
+ message = "BEEP BOOP - Die Tür ist schon seit ${toString long_threshold} Minuten offen! Student Nummer {{ range(1,500) | random }}, bitte schliesse die Tür";
+ language = "de";
+ };
+ }
+ ];
+ }
+ ];
+}