384 lines
11 KiB
Nix
384 lines
11 KiB
Nix
|
{lib, ... }:
|
||
|
let
|
||
|
persons = [ "frank" "daniel" "thorsten" "carsten" "thierry" "ecki"
|
||
|
# "felix" # custom actions
|
||
|
];
|
||
|
random_zu_lange = name: ''{{ [
|
||
|
"Du musst jetzt endlich nach Hause gehen ${name}!",
|
||
|
"10 Stunden sind rum, bald schenkst du den Franzosen deine Lebenszeit",
|
||
|
"Nur eine Minute über 10 Stunden kann zu einer Stunde Arbeit für Thorsten werden, ${name}.",
|
||
|
"In 10 Minuten kommt dich der Security Mann holen, ${name}",
|
||
|
"Zu lange, ${name}!" ] | random }}'' ;
|
||
|
|
||
|
|
||
|
random_announce = name: ''{{ [
|
||
|
"Guten Tag ${name}!",
|
||
|
"${name} is in da House",
|
||
|
"Ahoi ${name}",
|
||
|
"Moinsen ${name}",
|
||
|
"Moin Moin ${name}",
|
||
|
"Palim, Palim ${name}",
|
||
|
"Vorwärts Genosse ${name}",
|
||
|
"Gemeinsame Grüße, Genosse ${name}",
|
||
|
"Sozialistische Grüße, Genosse ${name}",
|
||
|
"Konzentrierte Grüße, Genosse ${name}",
|
||
|
"Ach, der ${name} ist auch wieder da...",
|
||
|
"Nicht ${name} schon wieder",
|
||
|
"Tri tra tralala, der ${name} ist wieder da.",
|
||
|
"Na sieh mal einer an, ${name} hat es auch her geschafft",
|
||
|
"Wer ist im Büro eingetroffen? ${name} ist es!",
|
||
|
"Willkommen in deinem Lieblingsbüro, ${name}.",
|
||
|
"Klopf, Klopf, wer ist da? ${name} ist da!",
|
||
|
"Messer, Gabel, Schere, Licht sind für kleinen ${name} nicht.",
|
||
|
"Ich kenne ein Geheimnis, ${name} ist abgekommen",
|
||
|
"Wir sind ${name}. Sie werden assimiliert werden",
|
||
|
"Achtung, es erfolgt eine Durchsage. ${name} ist eingetroffen",
|
||
|
"Die Scanner haben eine dem System bekannte Lebensform mit dem Namen ${name} detektiert",
|
||
|
"Das Büro sieht dich, ${name}",
|
||
|
"Im Kalender von ${name} sind heute acht Meetings eingeplant, von denen zwei bereits verpasst wurden",
|
||
|
"Das Postfach von ${name} beinhaltet einhundertachtundzwanzig ungelesene E-Mails.",
|
||
|
"Nachricht von Serge: ${name}, bitte melden Sie sich Umgehend bei mir im Büro!",
|
||
|
"Luftqualität hat sich durch das Eintreffen von ${name} um zweihunder Punkte verschlechtert, bitte alle Fenster öffnen.",
|
||
|
"${name} arbeitet gern für seinen Konzern",
|
||
|
"${name} ist nur froh im Großraumbüro",
|
||
|
"Für ${name} ist die schönste Zeit ... die Arbeit",
|
||
|
"Ein Fleißbienchen für ${name} zum rechtzeitigen Erscheinen im Büro",
|
||
|
"${name} ist heute wohl doch nicht im Office Home",
|
||
|
"${name} ist bereit für einen Tag voller Meetings",
|
||
|
"Trotz schwerer Männergrippe ist ${name} heute im Büro erschienen.",
|
||
|
"${name} kenne keine Parteien mehr, ${name} kenne nur noch Arbeitsplätze",
|
||
|
"${name}, Frage nicht, was dein Arbeitsplatz für dich tun kann. Frage, was du für deinen Arbeitsplatz tun kannst",
|
||
|
"${name} läuft bis in den Jemen - für sein Unternehmen. ${name} schwimmt bis nach Birma - für meine Firma",
|
||
|
"Der Cyberian ${name} ist gekommen um die Bahnwelt vor Cyber-Angriffen zu schützen",
|
||
|
"Alles paletto im Ghetto, ${name}?",
|
||
|
"Hach, ${name}, wenn du hier rein kommst fühlt es sich gleich wieder an wie Montag.",
|
||
|
"Oh nein, nicht schon wieder ${name}",
|
||
|
"Wer wohnt in der Ananas ganz tief im Meer? ${name} Schwammkopf!",
|
||
|
"Arbeit ist Freizeit! Wachstum ist Fortschritt! Sicherheit ist Freiheit!",
|
||
|
"Willkommen ${name}"] | random }}'' ;
|
||
|
patterns = [
|
||
|
[1000 500 250] # TODO: maybe even play a short audio announcement?
|
||
|
[150 150 150]
|
||
|
[255 255]
|
||
|
[500 500 100]
|
||
|
[100 1000 100]
|
||
|
# [125 250 500]
|
||
|
];
|
||
|
tmr_10h = name: {
|
||
|
"${name}_10h" = {
|
||
|
name = "${name} 10h Timer";
|
||
|
duration = "10:00:00";
|
||
|
};
|
||
|
};
|
||
|
multi_flash = { entity, delays ? [ 500 ], alias ? "${entity}_multi_flash_${toString (lib.length delays)}" }:
|
||
|
{
|
||
|
inherit alias;
|
||
|
sequence = lib.flatten (builtins.map (delay: [
|
||
|
{ service = "homeassistant.turn_on";
|
||
|
data.entity_id = entity;
|
||
|
}
|
||
|
{ delay.milliseconds = delay; }
|
||
|
{ service = "homeassistant.turn_off";
|
||
|
data.entity_id = entity;
|
||
|
}
|
||
|
{ delay.milliseconds = delay; }
|
||
|
]
|
||
|
) delays);
|
||
|
};
|
||
|
|
||
|
buzz_user = name: delays: { "buzz_${name}" = (multi_flash {
|
||
|
entity = "light.redbutton_buzzer";
|
||
|
inherit delays;
|
||
|
alias = "Red Button Buzz ${name}";
|
||
|
});
|
||
|
};
|
||
|
|
||
|
zu_lange_user = name:
|
||
|
{ "announce_${name}" = {
|
||
|
alias = "Random Zu Lange ${name}";
|
||
|
sequence = [
|
||
|
{ service = "media_player.play_media";
|
||
|
data = {
|
||
|
entity_id = "media_player.mpd";
|
||
|
media_content_type = "playlist";
|
||
|
media_content_id = "ansage";
|
||
|
};
|
||
|
}
|
||
|
{ delay.seconds = 5; }
|
||
|
{ service = "tts.google_say";
|
||
|
entity_id = "media_player.mpd";
|
||
|
data_template = {
|
||
|
message = random_zu_lange name;
|
||
|
language = "de";
|
||
|
};
|
||
|
}
|
||
|
];
|
||
|
};
|
||
|
};
|
||
|
announce_user = name:
|
||
|
{ "announce_${name}" = {
|
||
|
alias = "Random Announce ${name}";
|
||
|
sequence = [
|
||
|
{ delay.seconds = 10; }
|
||
|
{ service = "media_player.play_media";
|
||
|
data = {
|
||
|
entity_id = "media_player.mpd";
|
||
|
media_content_type = "playlist";
|
||
|
media_content_id = "ansage";
|
||
|
};
|
||
|
}
|
||
|
{ delay.seconds = 5; }
|
||
|
{ service = "tts.google_say";
|
||
|
entity_id = "media_player.mpd";
|
||
|
data_template = {
|
||
|
message = random_announce name;
|
||
|
language = "de";
|
||
|
};
|
||
|
}
|
||
|
];
|
||
|
};
|
||
|
};
|
||
|
automation_10h = name: [
|
||
|
{ alias = "start ${name} 10h";
|
||
|
trigger = {
|
||
|
platform = "state";
|
||
|
# TODO: ecki
|
||
|
entity_id = [ "device_tracker.${name}_phone"];
|
||
|
from = "not_home";
|
||
|
to = "home";
|
||
|
};
|
||
|
condition = {
|
||
|
condition = "and";
|
||
|
conditions = [
|
||
|
{
|
||
|
condition = "state";
|
||
|
entity_id = "timer.${name}_10h";
|
||
|
state = "idle";
|
||
|
}
|
||
|
{
|
||
|
condition = "time";
|
||
|
after = "06:00:00";
|
||
|
before = "12:00:00";
|
||
|
}
|
||
|
];
|
||
|
};
|
||
|
action = [
|
||
|
{ service = "timer.start";
|
||
|
entity_id = [ "timer.${name}_10h" ] ;
|
||
|
}
|
||
|
{ service = "homeassistant.turn_on";
|
||
|
entity_id = [
|
||
|
# "script.buzz_${name}"
|
||
|
"script.blitz_10s"
|
||
|
"script.announce_${name}"
|
||
|
];
|
||
|
}
|
||
|
];
|
||
|
}
|
||
|
|
||
|
{
|
||
|
alias = "Zu lange ${name}!";
|
||
|
trigger =
|
||
|
{
|
||
|
platform = "event";
|
||
|
event_type = "timer.finished";
|
||
|
event_data.entity_id = "timer.${name}_10h";
|
||
|
};
|
||
|
action =
|
||
|
[
|
||
|
{ service = "homeassistant.turn_on";
|
||
|
entity_id = [
|
||
|
"script.blitz_10s"
|
||
|
"script.zu_lange_${name}"
|
||
|
];
|
||
|
}
|
||
|
];
|
||
|
}
|
||
|
];
|
||
|
in
|
||
|
{
|
||
|
timer =lib.fold lib.recursiveUpdate {}
|
||
|
([
|
||
|
(tmr_10h "felix")
|
||
|
{ felix_8_30h = {
|
||
|
name = "Felix 8_30h Timer";
|
||
|
duration = "08:30:00";
|
||
|
};
|
||
|
felix_7h = {
|
||
|
name = "Felix 7h Timer";
|
||
|
duration = "07:00:00";
|
||
|
};
|
||
|
}
|
||
|
] ++ (map tmr_10h persons));
|
||
|
automation = lib.flatten (map automation_10h persons) ++
|
||
|
[
|
||
|
{ alias = "start Felix 10h";
|
||
|
trigger = {
|
||
|
platform = "state";
|
||
|
entity_id = [ "device_tracker.felix_phone" "device_tracker.felix_laptop" ];
|
||
|
from = "not_home";
|
||
|
to = "home";
|
||
|
};
|
||
|
condition = {
|
||
|
condition = "and";
|
||
|
conditions = [
|
||
|
{
|
||
|
condition = "state";
|
||
|
entity_id = "timer.felix_10h";
|
||
|
state = "idle";
|
||
|
}
|
||
|
{
|
||
|
condition = "time";
|
||
|
after = "06:00:00";
|
||
|
before = "12:00:00";
|
||
|
}
|
||
|
];
|
||
|
};
|
||
|
action = [
|
||
|
{ service = "timer.start";
|
||
|
entity_id = [ "timer.felix_10h" "timer.felix_8_30h" "timer.felix_7h" ] ;
|
||
|
}
|
||
|
{ service = "homeassistant.turn_on";
|
||
|
entity_id = [
|
||
|
# "script.buzz_felix"
|
||
|
"script.blitz_10s"
|
||
|
];
|
||
|
}
|
||
|
{
|
||
|
service = "tts.google_say";
|
||
|
entity_id = "media_player.mpd";
|
||
|
data_template = {
|
||
|
message = "Willkommen, Felix!";
|
||
|
language = "de";
|
||
|
};
|
||
|
}
|
||
|
{ service = "light.turn_on";
|
||
|
data = {
|
||
|
effect = "2";
|
||
|
entity_id = [ "light.status_felix" ];
|
||
|
};
|
||
|
}
|
||
|
];
|
||
|
}
|
||
|
|
||
|
{ alias = "Disable Felix timer at button press";
|
||
|
trigger = {
|
||
|
platform = "state";
|
||
|
entity_id = "binary_sensor.redbutton";
|
||
|
to = "on";
|
||
|
};
|
||
|
condition = {
|
||
|
condition = "and";
|
||
|
conditions = [
|
||
|
{
|
||
|
condition = "state";
|
||
|
entity_id = "timer.felix_10h";
|
||
|
state = "active";
|
||
|
}
|
||
|
{
|
||
|
condition = "time";
|
||
|
after = "12:00:00";
|
||
|
before = "22:00:00";
|
||
|
}
|
||
|
];
|
||
|
};
|
||
|
action =
|
||
|
[
|
||
|
{
|
||
|
service = "timer.cancel";
|
||
|
entity_id = [ "timer.felix_10h" "timer.felix_8_30h" "timer.felix_7h" ];
|
||
|
}
|
||
|
{
|
||
|
service = "homeassistant.turn_on";
|
||
|
entity_id = [ "script.buzz_red_led_fast" ];
|
||
|
}
|
||
|
{
|
||
|
service = "homeassistant.turn_off";
|
||
|
entity_id = [ "light.status_felix" ];
|
||
|
}
|
||
|
];
|
||
|
}
|
||
|
|
||
|
{
|
||
|
alias = "Genug gearbeitet Felix";
|
||
|
trigger =
|
||
|
{
|
||
|
platform = "event";
|
||
|
event_type = "timer.finished";
|
||
|
event_data.entity_id = "timer.felix_7h";
|
||
|
};
|
||
|
action =
|
||
|
[
|
||
|
{ service = "light.turn_on";
|
||
|
data = {
|
||
|
rgb_color= [0 255 0];
|
||
|
# effect = "0";
|
||
|
entity_id = [ "light.status_felix" ];
|
||
|
};
|
||
|
}
|
||
|
];
|
||
|
}
|
||
|
|
||
|
{
|
||
|
alias = "nun aber nach hause";
|
||
|
trigger =
|
||
|
{
|
||
|
platform = "event";
|
||
|
event_type = "timer.finished";
|
||
|
event_data.entity_id = "timer.felix_8_30h";
|
||
|
};
|
||
|
action =
|
||
|
[
|
||
|
{ service = "light.turn_on";
|
||
|
data = {
|
||
|
rgb_color= [255 255 0];
|
||
|
# effect = "0";
|
||
|
entity_id = [ "light.status_felix" ];
|
||
|
};
|
||
|
}
|
||
|
];
|
||
|
}
|
||
|
|
||
|
{
|
||
|
alias = "Zu lange Felix!";
|
||
|
trigger =
|
||
|
{
|
||
|
platform = "event";
|
||
|
event_type = "timer.finished";
|
||
|
event_data.entity_id = "timer.felix_10h";
|
||
|
};
|
||
|
action =
|
||
|
[
|
||
|
{
|
||
|
service = "notify.telegrambot";
|
||
|
data = {
|
||
|
title = "Zu lange Felix!";
|
||
|
message = "Du bist schon 10 Stunden auf Arbeit, geh jetzt gefälligst nach Hause!";
|
||
|
};
|
||
|
}
|
||
|
{
|
||
|
service = "homeassistant.turn_on";
|
||
|
entity_id = [
|
||
|
# "script.buzz_felix"
|
||
|
"script.blitz_10s"
|
||
|
];
|
||
|
}
|
||
|
{ service = "light.turn_on";
|
||
|
data = {
|
||
|
rgb_color= [255 0 0];
|
||
|
effect = "0";
|
||
|
entity_id = [ "light.status_felix" ];
|
||
|
};
|
||
|
}
|
||
|
];
|
||
|
}
|
||
|
]
|
||
|
;
|
||
|
script = lib.fold lib.recursiveUpdate {} (
|
||
|
(map (ab: buzz_user ab.fst ab.snd) (lib.zipLists persons patterns)) ++
|
||
|
(map (p: announce_user p) persons) ++
|
||
|
(map (p: zu_lange_user p) persons) ++
|
||
|
[ (announce_user "felix" ) (buzz_user "felix" [125 250 500] ) ]
|
||
|
);
|
||
|
}
|