ma ham: reenabel giesskanne
This commit is contained in:
parent
07b9c7e504
commit
c2e066e9e2
|
@ -3,7 +3,7 @@ let
|
|||
light = "light.arbeitszimmer_onebutton_led";
|
||||
at_work = "input_boolean.felix_at_work";
|
||||
lib = import ../lib;
|
||||
say = lib.say.living_room;
|
||||
say = lib.say.office;
|
||||
in
|
||||
{
|
||||
services.home-assistant.config.input_boolean.felix_at_work.name = "Felix auf Arbeit";
|
||||
|
@ -37,7 +37,16 @@ in
|
|||
{ service = "homeassistant.turn_on";
|
||||
entity_id = at_work;
|
||||
}
|
||||
] ++ (say "Willkommen auf Arbeit");
|
||||
] ++ (say "Willkommen auf Arbeit") ++
|
||||
[
|
||||
{ service = "media_player.play_media";
|
||||
data = {
|
||||
media_content_id = "https://radio.lassul.us/radio.mp3";
|
||||
media_content_type = "music";
|
||||
};
|
||||
target.entity_id = "media_player.office";
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
conditions = {
|
||||
|
|
|
@ -1,56 +1,57 @@
|
|||
let
|
||||
licht = [ "light.flur_statuslight" "light.wohnzimmer_status_led" ];
|
||||
kehrwoche_color = [ 204 0 255 ]; # pink
|
||||
nachtlicht_color = [ 255 190 0 ]; # ein dunkles rot
|
||||
nachtlicht = [ "light.flur_statuslight" "light.wohnzimmer_status_led" ];
|
||||
|
||||
# flurlicht an
|
||||
lightcond = name: conditions: rgb_color: brightness:
|
||||
{
|
||||
inherit conditions;
|
||||
sequence = {
|
||||
service = "light.turn_on";
|
||||
target.entity_id = nachtlicht;
|
||||
data = {
|
||||
inherit rgb_color brightness;
|
||||
};
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
services.home-assistant.config.automation =
|
||||
[
|
||||
{ alias = "Nachtlicht im Flur an";
|
||||
trigger = {
|
||||
platform = "sun";
|
||||
event = "sunset";
|
||||
};
|
||||
action =
|
||||
[
|
||||
{
|
||||
service = "light.turn_on";
|
||||
target.entity_id = licht;
|
||||
data = {
|
||||
brightness = 87;
|
||||
rgb_color = nachtlicht_color;
|
||||
#effect = "None";
|
||||
};
|
||||
{ alias = "Nachtlicht trigger";
|
||||
trigger = [
|
||||
{ platform = "sun"; event = "sunset"; }
|
||||
{ platform = "sun"; event = "sunrise"; }
|
||||
{ platform = "state"; entity_id = [
|
||||
"calendar.kehrwoche_kehrwoche"
|
||||
"binary_sensor.badezimmer_fenster_contact"
|
||||
"binary_sensor.dusche_fenster_contact"
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
{ alias = "Nachtlicht in Flur aus, Kehrwoche an";
|
||||
trigger = {
|
||||
platform = "sun";
|
||||
event = "sunrise";
|
||||
};
|
||||
action =
|
||||
[
|
||||
{ choose = [
|
||||
{
|
||||
conditions = {
|
||||
condition = "state";
|
||||
entity_id = "calendar.kehrwoche_kehrwoche";
|
||||
state = "on";
|
||||
};
|
||||
sequence = {
|
||||
service = "light.turn_on";
|
||||
target.entity_id = licht;
|
||||
data = {
|
||||
brightness = 190;
|
||||
rgb_color = kehrwoche_color; # pink
|
||||
};
|
||||
};
|
||||
}];
|
||||
(lightcond "Badezimmer Fenster Auf"
|
||||
{ condition = "state"; entity_id = "binary_sensor.badezimmer_fenster_contact"; state = "on"; }
|
||||
[ 64 207 255 ] 255 # helblau
|
||||
)
|
||||
(lightcond "Duschenster auf"
|
||||
{ condition = "state"; entity_id = "binary_sensor.dusche_fenster_contact"; state = "on"; }
|
||||
[ 64 207 255 ] 255 # helblau
|
||||
)
|
||||
(lightcond "Nachtlicht"
|
||||
{ condition = "state"; entity_id = "sun.sun"; state = "below_horizon"; }
|
||||
[ 255 190 0 ] 90 # red
|
||||
)
|
||||
(lightcond "Kehrwoche"
|
||||
{ condition = "state"; entity_id = "calendar.kehrwoche_kehrwoche"; state = "on"; }
|
||||
[ 204 0 255 ] 128 # pink
|
||||
)
|
||||
];
|
||||
default = {
|
||||
service = "light.turn_off";
|
||||
entity_id = licht;
|
||||
};
|
||||
service = "light.turn_off";
|
||||
entity_id = nachtlicht;
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
@ -7,8 +7,10 @@ let
|
|||
light = "light.espcam_02_light";
|
||||
seconds = 90; # default shutoff to protect the LED from burning out
|
||||
};
|
||||
seconds = 70; # time for giesskanne
|
||||
seconds = 60*5; # time for giesskanne - 5 minutes
|
||||
pump = "switch.arbeitszimmer_giesskanne_relay";
|
||||
light = "switch.terrasse_plug_relay";
|
||||
|
||||
# sensor = "sensor.statistics_for_sensor_crafting_brotbox_soil_moisture";
|
||||
in
|
||||
{
|
||||
|
@ -26,19 +28,27 @@ in
|
|||
[
|
||||
|
||||
##### brotbox
|
||||
{ alias = "Water the plant for ${toString seconds} seconds";
|
||||
{ alias = "Water the plant for ${toString seconds} seconds and turn on the light";
|
||||
trigger = [
|
||||
{ # trigger at 23:15 no matter what
|
||||
# TODO: retry or run only if switch.wasser is available
|
||||
platform = "time";
|
||||
at = "23:15:00";
|
||||
platform = "sun";
|
||||
event = "sunrise";
|
||||
}
|
||||
];
|
||||
action =
|
||||
[
|
||||
{ # take a snapshot before watering
|
||||
|
||||
{ # now turn on the pumping services
|
||||
# i do not start hte pump and light before the snapshot because i do
|
||||
# not know how long it takes (do not want to water the plants for too long)
|
||||
service = "homeassistant.turn_on";
|
||||
entity_id = [ cam.light ];
|
||||
entity_id = [ pump light ];
|
||||
}
|
||||
{ delay.seconds = seconds; }
|
||||
{
|
||||
service = "homeassistant.turn_off";
|
||||
entity_id = [ pump cam.light ];
|
||||
}
|
||||
{ # TODO: we could also create a recording with camera.record
|
||||
service = "camera.snapshot";
|
||||
|
@ -48,34 +58,21 @@ in
|
|||
filename = "/var/lib/hass/cam/${cam.name}_{{ now().strftime('%Y%m%d-%H%M%S') }}.jpg";
|
||||
};
|
||||
}
|
||||
|
||||
{ # now turn on the pumping services
|
||||
# i do not start hte pump and light before the snapshot because i do
|
||||
# not know how long it takes (do not want to water the plants for too long)
|
||||
service = "homeassistant.turn_on";
|
||||
entity_id = [ pump ];
|
||||
}
|
||||
{ delay.seconds = seconds; }
|
||||
{
|
||||
service = "homeassistant.turn_off";
|
||||
entity_id = [ pump cam.light ];
|
||||
}
|
||||
];
|
||||
}
|
||||
{ alias = "Always turn off the light after ${toString (cam.seconds)}s";
|
||||
{ alias = "Turn off the light at sunset";
|
||||
trigger = [
|
||||
{
|
||||
platform = "state";
|
||||
entity_id = cam.light;
|
||||
to = "on";
|
||||
for.seconds = cam.seconds;
|
||||
platform = "sun";
|
||||
event = "sunset";
|
||||
# offset = "+02:00:00";
|
||||
}
|
||||
];
|
||||
action =
|
||||
[
|
||||
{
|
||||
service = "homeassistant.turn_off";
|
||||
entity_id = [ pump cam.light ];
|
||||
entity_id = [ light ];
|
||||
}
|
||||
];
|
||||
}
|
||||
|
@ -93,7 +90,7 @@ in
|
|||
[
|
||||
{
|
||||
service = "homeassistant.turn_off";
|
||||
entity_id = [ pump cam.light ];
|
||||
entity_id = [ pump ];
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
@ -7,12 +7,26 @@ let
|
|||
schranklicht = "light.wohnzimmer_schrank_osram";
|
||||
weihnachtslicht = "light.wohnzimmer_fenster_lichterkette_licht";
|
||||
fernsehlicht = "light.wled";
|
||||
|
||||
all_lights = [
|
||||
schranklicht weihnachtslicht fernsehlicht
|
||||
# extra lights to also turn off
|
||||
# wohnzimmer
|
||||
"light.wohnzimmer_komode_osram"
|
||||
"light.wohnzimmer_stehlampe_osram"
|
||||
# arbeitszimmer
|
||||
"light.wled_4"
|
||||
"light.arbeitszimmer_schrank_dimmer"
|
||||
"light.arbeitszimmer_pflanzenlicht"
|
||||
];
|
||||
|
||||
final_off = "00:37";
|
||||
|
||||
turn_on = entity_id: at:
|
||||
{ alias = "Turn on ${entity_id} at ${at}";
|
||||
turn_on = entity_id: offset:
|
||||
# negative offset => before sunset
|
||||
{ alias = "Turn on ${entity_id} at sunset ${offset}";
|
||||
trigger = [
|
||||
{ platform = "time"; inherit at; }
|
||||
{ platform = "sun"; event = "sunset"; inherit offset; }
|
||||
];
|
||||
action =
|
||||
[
|
||||
|
@ -25,9 +39,9 @@ in
|
|||
{
|
||||
automation =
|
||||
[
|
||||
(turn_on schranklicht "17:30")
|
||||
(turn_on weihnachtslicht "17:30")
|
||||
(turn_on fernsehlicht "19:00")
|
||||
(turn_on schranklicht "-00:30:00")
|
||||
#(turn_on weihnachtslicht "-00:30:00")
|
||||
(turn_on fernsehlicht "-00:00:00")
|
||||
|
||||
{ alias = "Always turn off the urlaub lights at ${final_off}";
|
||||
trigger = [
|
||||
|
|
|
@ -31,15 +31,16 @@ in {
|
|||
./media/firetv.nix
|
||||
./media/sonos.nix
|
||||
./media/remote_sound_wohnzimmer.nix
|
||||
./media/remote_sound_arbeitszimmer.nix
|
||||
|
||||
./automation/check-in.nix
|
||||
./automation/fenster_auf.nix
|
||||
./automation/firetv_restart.nix
|
||||
./automation/light_buttons.nix
|
||||
./automation/wohnzimmer_rf_fernbedienung.nix
|
||||
./automation/ladestecker_timer.nix
|
||||
# ./automation/ladestecker_timer.nix
|
||||
./automation/flurlicht.nix
|
||||
#./automation/giesskanne.nix
|
||||
./automation/giesskanne.nix
|
||||
./automation/pflanzen_giessen_erinnerung.nix
|
||||
./automation/urlaub.nix
|
||||
./automation/moodlight.nix
|
||||
|
@ -59,7 +60,7 @@ in {
|
|||
extraPackages = p: [
|
||||
(p.callPackage ./deps/dwdwfsapi.nix {})
|
||||
(p.callPackage ./signal-rest/pkg.nix {})
|
||||
#(p.callPackage ./deps/pykodi.nix {})
|
||||
(p.callPackage ./deps/pykodi.nix {})
|
||||
];
|
||||
};
|
||||
|
||||
|
@ -141,11 +142,11 @@ in {
|
|||
retain = true;
|
||||
};
|
||||
};
|
||||
luftdaten = {
|
||||
show_on_map = true;
|
||||
sensor_id = 10529;
|
||||
sensors.monitored_conditions = [ "P1" "P2" ];
|
||||
};
|
||||
#luftdaten = {
|
||||
# show_on_map = true;
|
||||
# sensor_id = 10529;
|
||||
# sensors.monitored_conditions = [ "P1" "P2" ];
|
||||
#};
|
||||
#binary_sensor =
|
||||
# flurlicht.binary_sensor;
|
||||
|
||||
|
|
|
@ -25,19 +25,20 @@ let
|
|||
default_scene_1 = "Solid";
|
||||
default_color_1 = "Default";
|
||||
main_color_select_1 = "select.wled_color_palette";
|
||||
light_group_1.entity_id = [
|
||||
main_light_1
|
||||
];
|
||||
light_group_1.entity_id = [
|
||||
main_light_1
|
||||
];
|
||||
|
||||
# contains only the actually changeable lights
|
||||
light_group_2.entity_id = [
|
||||
light_group_2 = { entity_id = [
|
||||
"light.wohnzimmer_komode_osram"
|
||||
"light.wohnzimmer_schrank_osram"
|
||||
"light.wohnzimmer_fenster_lichterkette_licht"
|
||||
];
|
||||
light_group_3.entity_id = [
|
||||
];
|
||||
};
|
||||
light_group_3 = { entity_id = [
|
||||
"light.wohnzimmer_stehlampe_osram"
|
||||
];
|
||||
]; };
|
||||
|
||||
statecond = cond: { # cond must be a list
|
||||
condition = "template";
|
||||
|
|
107
2configs/home/ham/media/remote_sound_arbeitszimmer.nix
Normal file
107
2configs/home/ham/media/remote_sound_arbeitszimmer.nix
Normal file
|
@ -0,0 +1,107 @@
|
|||
{ lib, ...}:
|
||||
let
|
||||
statecond = cond: { # cond must be a list
|
||||
condition = "template";
|
||||
value_template = "{{ trigger.to_state.state in ( " +
|
||||
(lib.concatMapStringsSep "," (x: "'${x}'") cond) + ") }}";
|
||||
};
|
||||
vol_change = 0.030;
|
||||
|
||||
max_repeat = "30"; # max loops to repeat before bailing out
|
||||
remote = "sensor.arbeitszimmer_sound1_action";
|
||||
player = "media_player.office";
|
||||
last_state_sensor_name = "last_rotation_action_arbeitszimmer";
|
||||
last_state_sensor = "input_text.${last_state_sensor_name}";
|
||||
# - service: media_player.volume_set
|
||||
# target:
|
||||
# entity_id: media_player.kitchen
|
||||
# data:
|
||||
# volume_level: {{ state_attr('media_player.kitchen', 'volume_level') + 0.02 }}
|
||||
rotate_stop = "brightness_stop";
|
||||
rotate_right = "brightness_move_up";
|
||||
rotate_left = "brightness_move_down" ;
|
||||
|
||||
single_click = "toggle";
|
||||
double_click = "brightness_step_up";
|
||||
triple_click = "brightness_step_down";
|
||||
in {
|
||||
services.home-assistant.config.input_text."${last_state_sensor_name}".name = "Last action of the arbeitszimmer";
|
||||
services.home-assistant.config.automation = [
|
||||
{
|
||||
trigger = {
|
||||
platform = "state";
|
||||
entity_id = remote;
|
||||
to = [ rotate_stop ];
|
||||
};
|
||||
action = [
|
||||
{ service = "input_text.set_value";
|
||||
target.entity_id = last_state_sensor;
|
||||
data.value = "stop";
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
alias = "Perform Actions with ${remote}";
|
||||
trigger = {
|
||||
platform = "state";
|
||||
entity_id = remote;
|
||||
to = [ single_click double_click triple_click rotate_left rotate_right ];
|
||||
};
|
||||
#mode = "queued";
|
||||
#max = 5;
|
||||
mode = "single";
|
||||
#max_exceeded = "silent";
|
||||
action = [
|
||||
{
|
||||
choose = [
|
||||
{
|
||||
conditions = statecond [ single_click ];
|
||||
sequence = [
|
||||
{ service = "media_player.media_play_pause";
|
||||
target.entity_id = player;
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
conditions = statecond [ rotate_left rotate_right ];
|
||||
sequence = let
|
||||
vol_up = toString vol_change;
|
||||
vol_down = toString (-1 * vol_change);
|
||||
in [
|
||||
{
|
||||
variables.nextvol = ''{% if trigger.to_state.state in ( "${rotate_left}" ) -%} ${vol_down} {% else -%} ${vol_up} {% endif -%}'';
|
||||
variables.state = ''{% if trigger.to_state.state in ( "${rotate_left}" ) -%} left {% else -%} right {% endif -%}'';
|
||||
}
|
||||
{ service = "input_text.set_value";
|
||||
target.entity_id = last_state_sensor;
|
||||
data.value = ''{{ state }}'';
|
||||
}
|
||||
{
|
||||
repeat = {
|
||||
sequence = [
|
||||
{ service = "media_player.volume_set";
|
||||
target.entity_id = player;
|
||||
data.volume_level = ''{{ state_attr("${player}","volume_level") + (nextvol|float) }}'';
|
||||
}
|
||||
{ delay.milliseconds = "150"; }
|
||||
];
|
||||
while = [
|
||||
{
|
||||
condition = "template";
|
||||
value_template = ''{{ states("${last_state_sensor}") == state }}'';
|
||||
}
|
||||
{
|
||||
condition = "template";
|
||||
value_template = "{{ repeat.index <= ${max_repeat}}}";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
|
@ -2,6 +2,7 @@
|
|||
services.home-assistant.config.sonos.media_player.hosts = [
|
||||
"192.168.111.30"
|
||||
"192.168.111.31"
|
||||
"192.168.111.32"
|
||||
];
|
||||
|
||||
}
|
||||
|
|
20
2configs/home/ham/person/default.nix
Normal file
20
2configs/home/ham/person/default.nix
Normal file
|
@ -0,0 +1,20 @@
|
|||
{config, ... }:
|
||||
{
|
||||
services.home-assistant.config.person = [
|
||||
{
|
||||
name = "Felix";
|
||||
id = 1;
|
||||
device_trackers = [
|
||||
"device_tracker.felix_phone"
|
||||
"device_tracker.x"
|
||||
];
|
||||
}
|
||||
{
|
||||
name = "Misa";
|
||||
id = 2;
|
||||
device_trackers = [
|
||||
"device_tracker.misa_phone"
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
Loading…
Reference in a new issue