{ 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"); } ]; }; }