stockholm/makefu/2configs/home/ham/automation/fenster_auf.nix
2022-09-23 23:41:30 +02:00

139 lines
3.9 KiB
Nix

{ lib, ... }:
#uses:
# notify.signal
# binary_sensor.badezimmer_fenster_contact
# binary_sensor.dusche_fenster_contact
let
hlib = import ../lib;
say = hlib.say.office;
draussen = "sensor.wohnzimmer_temp_temperature";
draussen_diff = "sensor.unterschied_draussen_drinnen";
draussen_heiss = 23;
min = 20;
fenster_offen = name: entity:
{ alias = "${name} seit ${toString min} Minuten offen";
trigger = [
{
platform = "state";
entity_id = entity;
to = "on";
for.minutes = min;
}
];
condition = [
];
action =
[
{
service = "notify.signal_home";
data_template = {
message = "${name} seit ${toString min} Minuten offen und draussen ist es gerade {{states.sensor.dark_sky_temperature.state}}°C bei {{states.sensor.dark_sky_humidity.state}}% Luftfeuchte";
};
}
{
service = "input_boolean.turn_on";
target.entity_id = "input_boolean.${lib.toLower name}_lang_offen";
}
];
};
fenster_geschlossen_lang = name: entity:
{ alias = "${name} wieder geschlossen";
trigger = [
{
platform = "state";
entity_id = entity;
to = "off";
for.seconds = 10;
}
];
condition = [
{ condition = "state";
entity_id = "input_boolean.${lib.toLower name}_lang_offen";
state = "on";
}
];
action =
[
{
service = "notify.signal_home";
data = {
message= "${name} ist wieder geschlossen, Danke!";
};
}
{
service = "input_boolean.turn_off";
target.entity_id = "input_boolean.${lib.toLower name}_lang_offen";
}
];
};
in {
services.home-assistant.config = {
template = [
{ sensor = {
name = "Unterschied Draussen Drinnen";
unit_of_measurement = "°C";
state = ''
{% set inside = states("${draussen}") | float | round(2) -%}
{% set outside = states("sensor.dark_sky_temperature") | float | round(2) -%}
{{ ((outside - inside) | round(1) )}}'';
};
}
];
sensor = [
{ platform = "season"; type = "meteorological";}
];
input_boolean = {
badezimmerfenster_lang_offen.name = "Badezimmer lange offen";
duschfenster_lang_offen.name = "Duschfenster lange offen";
ist_sommer = {
name = "Es ist Sommer";
initial = true; # TODO
};
};
automation = [
(fenster_geschlossen_lang "Badezimmerfenster" "binary_sensor.badezimmer_fenster_contact")
(fenster_geschlossen_lang "Duschfenster" "binary_sensor.dusche_fenster_contact")
(fenster_offen "Badezimmerfenster" "binary_sensor.badezimmer_fenster_contact")
(fenster_offen "Duschfenster" "binary_sensor.dusche_fenster_contact")
{ alias = "Draussen ist wieder kaelter";
trigger = [
{
platform = "numeric_state";
entity_id = draussen_diff;
below = 0;
for.minutes = 20;
}
];
condition = [
{ condition = "numeric_state";
entity_id = draussen;
above = draussen_heiss;
}
];
action = (say "Draussen ist es endlich kühler, jetzt kann man die Fenster auf machen");
}
{ alias = "Draussen ist zu warm";
trigger = [
{
platform = "numeric_state";
entity_id = draussen_diff;
above = 0;
for.minutes = 20;
}
];
condition = [
{ condition = "numeric_state";
entity_id = draussen;
above = draussen_heiss;
}
];
action = (say "Draussen wird es jetzt zu warm, besser das fenster schliessen");
}
];
};
}