ma bureautomation: add 10h timers for all participants
move into combination folders, fix mittagessen, add working tts with random output
This commit is contained in:
parent
32a808f9eb
commit
4ecfee1606
@ -1,154 +0,0 @@
|
||||
[
|
||||
{ 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_red_led_fast"
|
||||
"script.blitz_10s"
|
||||
];
|
||||
}
|
||||
{ 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_red_led"
|
||||
"script.blitz_10s"
|
||||
];
|
||||
}
|
||||
{ service = "light.turn_on";
|
||||
data = {
|
||||
rgb_color= [255 0 0];
|
||||
effect = "0";
|
||||
entity_id = [ "light.status_felix" ];
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
]
|
@ -25,7 +25,7 @@
|
||||
}
|
||||
{
|
||||
service = "tts.google_say";
|
||||
entity_id = "media_player.kodi";
|
||||
entity_id = "media_player.mpd";
|
||||
data = {
|
||||
message = "Willkommen in deinem Lieblingsbüro";
|
||||
language = "de";
|
||||
@ -35,7 +35,7 @@
|
||||
service = "notify.telegrambot";
|
||||
data = {
|
||||
title = "Bureau Startup";
|
||||
message = "Willkommen {{ trigger.platform }}";
|
||||
message = "Das Büro wurde eröffnet";
|
||||
};
|
||||
}
|
||||
];
|
||||
|
383
makefu/2configs/bureautomation/combination/10h_timers.nix
Normal file
383
makefu/2configs/bureautomation/combination/10h_timers.nix
Normal file
@ -0,0 +1,383 @@
|
||||
{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] ) ]
|
||||
);
|
||||
}
|
3
makefu/2configs/bureautomation/combination/README.md
Normal file
3
makefu/2configs/bureautomation/combination/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Combination Folder
|
||||
files return a dictionary of different types used in home-assistant instead of
|
||||
a single thing.
|
89
makefu/2configs/bureautomation/combination/mittagessen.nix
Normal file
89
makefu/2configs/bureautomation/combination/mittagessen.nix
Normal file
@ -0,0 +1,89 @@
|
||||
{ lib, ... }:
|
||||
let
|
||||
# TODO: remove redundant code (from multi_blink) via lib
|
||||
flash_entity = { entity, delay ? 500, count ? 4, alias ? "${entity}_blink_${toString count}_${toString delay}" }:
|
||||
{
|
||||
inherit alias;
|
||||
sequence = lib.flatten (builtins.genList (i: [
|
||||
{ service = "homeassistant.turn_on";
|
||||
data.entity_id = entity;
|
||||
}
|
||||
{ delay.milliseconds = delay; }
|
||||
{ service = "homeassistant.turn_off";
|
||||
data.entity_id = entity;
|
||||
}
|
||||
{ delay.milliseconds = delay; }
|
||||
]
|
||||
) count);
|
||||
};
|
||||
# TODO: use influxdb and check if pommes
|
||||
random_mittagessen = '' {{ [
|
||||
"Es ist 12 uhr 30. Der Aramark Gourmettempel hat, wie jeden Tag, wieder die feinsten Köstlichkeiten für euch Vorbereitet",
|
||||
"Heute bei Aramark: Rezepte aus Ländern, von denen Ihr noch nie gehört habt, Deutsch zubereitet",
|
||||
"Heute bei Aramark im Angebot: Scheiss mit Reis oder Reste von Freitag",
|
||||
"MHHHH es ist wieder mal so weit, lecker Bayerisch Kraut mit asiatischen Nudeln",
|
||||
"Es ist 12 Uhr 30 und Heute gibt es Pommes - vielleicht",
|
||||
"Heute gibt es Pommes - leider nicht einzeln zu verkaufen, da die Schälchen alle sind",
|
||||
"Heute gibt es Pommes - verarscht! Natürlich gibt es nur salzlosen Reis, oder salzlose Nudeln.",
|
||||
"Heute auf dem Speiseplan: Sushi vom Vortag",
|
||||
"Aramark Kantinenessen: Der Hunger treibt es rein, der Geiz hält es drin.",
|
||||
"Das Essen in der Snackeria sieht heute wie die bessere Alternative aus",
|
||||
"Heute ist wohl wieder ein Beilagen-Tag",
|
||||
"Lunch time! Good luck, you will need it!",
|
||||
"Heute vielleicht lieber doch nur einen Salat?",
|
||||
"Im Büro ist es eh gerade viel zu warm, also ab zur Kantine",
|
||||
"Im Büro ist es eh gerade viel zu kalt, also ab zur Kantine",
|
||||
"Heute scheint die Auswahl wieder sehr schwierig zu sein. Vielleicht doch lieber ein Brötchen mit Fleischkäse vom Bäcker beim Baumarkt?",
|
||||
"Wer hat hier schon wieder ein Meeting auf 12 Uhr gelegt? Skandal!",
|
||||
"Jetzt nur noch kurz die Mail fertig schreiben und schon kann es los gehen.",
|
||||
"Es ist 13 Uhr und die Mittagspause ist bald vorbei .... Kleiner Scherz, es ist erst 12:30, aber Ihr hättet auch nicht wirklich etwas verpasst.",
|
||||
"Hallo, es ist nun 12 Uhr 30! Dies entspricht der Essenszeit aller Büroinsassen. Bitte begebt euch zur Aramark Essensausgabe um euren menschlichen Bedürfnissen nachzukommen."] | random }}'';
|
||||
in {
|
||||
automation = [
|
||||
{ alias = "Mittagessen";
|
||||
trigger = {
|
||||
platform = "time";
|
||||
at = "12:30:00";
|
||||
};
|
||||
action = [
|
||||
{ service = "homeassistant.turn_on";
|
||||
entity_id = [
|
||||
"script.mittagessen_announce"
|
||||
"script.blitz_10s"
|
||||
"script.mittagessenlicht"
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
script = {
|
||||
mittagessenlicht = (flash_entity {
|
||||
entity = "switch.bauarbeiterlampe";
|
||||
alias = "Bauarbeiterlampe Mittagessenlicht";
|
||||
delay = 1000;
|
||||
count = 5;
|
||||
});
|
||||
mittagessen_announce = {
|
||||
alias = "Random Mittagessen announce";
|
||||
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_mittagessen;
|
||||
language = "de";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
@ -1,7 +1,8 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
let
|
||||
kodi-host = "192.168.8.11";
|
||||
|
||||
ten_hours = import ./combination/10h_timers.nix { inherit lib; }; # provides: timer automation script
|
||||
mittagessen = import ./combination/mittagessen.nix { inherit lib; }; # provides: automation script
|
||||
in {
|
||||
networking.firewall.allowedTCPPorts = [ 8123 ];
|
||||
state = [ "/var/lib/hass/known_devices.yaml" ];
|
||||
@ -22,7 +23,7 @@ in {
|
||||
})).override {
|
||||
extraPackages = ps: with ps; [
|
||||
pkgs.pico2wave
|
||||
python-forecastio jsonrpc-async jsonrpc-websocket
|
||||
python-forecastio jsonrpc-async jsonrpc-websocket mpd2
|
||||
(callPackage ./gtts-token.nix { })
|
||||
];
|
||||
};
|
||||
@ -42,6 +43,14 @@ in {
|
||||
}
|
||||
];
|
||||
};
|
||||
# https://www.home-assistant.io/components/influxdb/
|
||||
influxdb = {
|
||||
database = "hass";
|
||||
tags = {
|
||||
instance = "wbob";
|
||||
source = "hass";
|
||||
};
|
||||
};
|
||||
mqtt = {
|
||||
broker = "localhost";
|
||||
port = 1883;
|
||||
@ -62,23 +71,10 @@ in {
|
||||
};
|
||||
};
|
||||
switch = (import ./switch/tasmota_switch.nix) ++
|
||||
(import ./switch/rfbridge.nix);
|
||||
(import ./switch/rfbridge.nix);
|
||||
light = (import ./light/statuslight.nix) ++
|
||||
(import ./light/buzzer.nix);
|
||||
timer = {
|
||||
felix_10h = {
|
||||
name = "Felix 10h Timer";
|
||||
duration = "10:00:00";
|
||||
};
|
||||
felix_8_30h = {
|
||||
name = "Felix 8_30h Timer";
|
||||
duration = "08:30:00";
|
||||
};
|
||||
felix_7h = {
|
||||
name = "Felix 7h Timer";
|
||||
duration = "07:00:00";
|
||||
};
|
||||
};
|
||||
(import ./light/buzzer.nix);
|
||||
timer = ten_hours.timer;
|
||||
notify = [
|
||||
{
|
||||
platform = "kodi";
|
||||
@ -97,8 +93,15 @@ in {
|
||||
{ platform = "kodi";
|
||||
host = kodi-host;
|
||||
}
|
||||
{ platform = "mpd";
|
||||
host = "127.0.0.1";
|
||||
}
|
||||
];
|
||||
script = lib.fold lib.recursiveUpdate {} [
|
||||
((import ./script/multi_blink.nix) {inherit lib;})
|
||||
ten_hours.script
|
||||
mittagessen.script
|
||||
];
|
||||
script = (import ./script/multi_blink.nix) {inherit lib;};
|
||||
binary_sensor =
|
||||
(import ./binary_sensor/buttons.nix) ++
|
||||
(import ./binary_sensor/motion.nix);
|
||||
@ -134,7 +137,7 @@ in {
|
||||
logbook = {};
|
||||
tts = [
|
||||
{ platform = "google";
|
||||
language = "de";
|
||||
language = "de";
|
||||
}
|
||||
{ platform = "voicerss";
|
||||
api_key = builtins.readFile <secrets/hass/voicerss.apikey>;
|
||||
@ -162,8 +165,8 @@ in {
|
||||
"group.switches"
|
||||
];
|
||||
};
|
||||
automation = [
|
||||
];
|
||||
automation = [];
|
||||
|
||||
switches = [
|
||||
"switch.bauarbeiterlampe"
|
||||
"switch.blitzdings"
|
||||
@ -181,6 +184,7 @@ in {
|
||||
"device_tracker.carsten_phone"
|
||||
"device_tracker.thierry_phone"
|
||||
"device_tracker.frank_phone"
|
||||
"device_tracker.anthony_phone"
|
||||
# "person.thorsten"
|
||||
# "person.felix"
|
||||
# "person.ecki"
|
||||
@ -202,6 +206,7 @@ in {
|
||||
"script.blitz_10s"
|
||||
"script.buzz_red_led_fast"
|
||||
"timer.felix_10h"
|
||||
"timer.frank_10h"
|
||||
"sensor.easy2_dht22_humidity"
|
||||
"sensor.easy2_dht22_temperature"
|
||||
# "binary_sensor.redbutton"
|
||||
@ -222,9 +227,10 @@ in {
|
||||
# we don't use imports because the expressions do not merge in
|
||||
# home-assistant
|
||||
automation = (import ./automation/bureau-shutdown.nix) ++
|
||||
(import ./automation/nachtlicht.nix) ++
|
||||
(import ./automation/hass-restart.nix) ++
|
||||
(import ./automation/10h_timer.nix);
|
||||
(import ./automation/nachtlicht.nix) ++
|
||||
(import ./automation/hass-restart.nix) ++
|
||||
ten_hours.automation ++
|
||||
mittagessen.automation;
|
||||
device_tracker = (import ./device_tracker/openwrt.nix );
|
||||
};
|
||||
};
|
||||
|
@ -1,5 +1,7 @@
|
||||
{lib, ... }:
|
||||
let
|
||||
# TODO: flash with different delay
|
||||
|
||||
# let an entity blink for X times with a delay of Y milliseconds
|
||||
flash_entity = { entity, delay ? 500, count ? 4, alias ? "${entity}_blink_${toString count}_${toString delay}" }:
|
||||
{
|
||||
@ -34,4 +36,10 @@ in {
|
||||
count = 1;
|
||||
alias = "blitz for 10 seconds";
|
||||
});
|
||||
schlechteluft = (flash_entity {
|
||||
entity = "switch.bauarbeiterlampe";
|
||||
alias = "Schlechte Luft Lampe 5 secs";
|
||||
delay = 5000;
|
||||
count = 1;
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user