ma bureautomation: stream-line 10h timers

This commit is contained in:
makefu 2019-07-04 08:05:54 +02:00
parent c2230d30c5
commit b3b2dd6521
No known key found for this signature in database
GPG Key ID: 36F7711F3FC0F225

View File

@ -1,14 +1,15 @@
{lib, ... }: {lib, ... }:
let let
persons = [ "frank" "daniel" "thorsten" "carsten" "thierry" "ecki" persons = [ "frank" "daniel" "thorsten" "carsten" "thierry" "ecki" "felix"
# "felix" # custom actions "anthony" # antony
"thierry" # tjeri
]; ];
random_zu_lange = name: ''{{ [ random_zu_lange = name: ''{{ [
"Du musst jetzt endlich nach Hause gehen ${name}!", "Du musst jetzt endlich nach Hause gehen ${name}!",
"10 Stunden sind rum, bald schenkst du den Franzosen deine Lebenszeit", "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}.", "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}", "In 10 Minuten kommt dich der Security Mann holen, ${name}",
"Zu lange, ${name}!" ] | random }}'' ; "Zu lange, ${name}!" ] | random }}'' ;
random_announce = name: ''{{ [ random_announce = name: ''{{ [
@ -94,8 +95,9 @@ let
}; };
zu_lange_user = name: zu_lange_user = name:
{ "announce_${name}" = { { "zu_lange_${name}" = {
alias = "Random Zu Lange ${name}"; alias = "Random Zu Lange ${name}";
sequence = [ sequence = [
{ service = "media_player.play_media"; { service = "media_player.play_media";
data = { data = {
@ -176,14 +178,21 @@ let
]; ];
} }
{ { alias = "Zu lange ${name}!";
alias = "Zu lange ${name}!";
trigger = trigger =
{ {
platform = "event"; platform = "event";
event_type = "timer.finished"; event_type = "timer.finished";
event_data.entity_id = "timer.${name}_10h"; event_data.entity_id = "timer.${name}_10h";
}; };
condition =
{
condition = "state";
entity_id = "device_tracker.${name}_phone";
state = "home";
};
action = action =
[ [
{ service = "homeassistant.turn_on"; { service = "homeassistant.turn_on";
@ -198,186 +207,11 @@ let
in in
{ {
timer =lib.fold lib.recursiveUpdate {} timer =lib.fold lib.recursiveUpdate {}
([ (map tmr_10h persons);
(tmr_10h "felix") automation = (lib.flatten (map automation_10h persons));
{ 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 {} ( script = lib.fold lib.recursiveUpdate {} (
(map (ab: buzz_user ab.fst ab.snd) (lib.zipLists persons patterns)) ++ (map (ab: buzz_user ab.fst ab.snd) (lib.zipLists persons patterns)) ++
(map (p: announce_user p) persons) ++ (map (p: announce_user p) persons) ++
(map (p: zu_lange_user p) persons) ++ (map (p: zu_lange_user p) persons)
[ (announce_user "felix" ) (buzz_user "felix" [125 250 500] ) ]
); );
} }