Improve hass-config
This commit is contained in:
parent
2a93a2e788
commit
652a79f0a0
|
@ -1,7 +1,7 @@
|
||||||
{ pkgs, lib, ... }:
|
{ pkgs, lib, ... }:
|
||||||
let
|
let
|
||||||
haLib = import ./lib.nix lib;
|
haLib = import ./lib.nix lib;
|
||||||
inherit (haLib) modules util cards conditions triggers;
|
inherit (haLib) modules util cards conditions triggers jinja actions tap_actions;
|
||||||
modes =
|
modes =
|
||||||
let
|
let
|
||||||
empty = {
|
empty = {
|
||||||
|
@ -16,7 +16,7 @@ let
|
||||||
icon = util.mkIcon "account";
|
icon = util.mkIcon "account";
|
||||||
title = "Aktiv";
|
title = "Aktiv";
|
||||||
};
|
};
|
||||||
force-active = {
|
force_active = {
|
||||||
icon = util.mkIcon "lightbulb-on";
|
icon = util.mkIcon "lightbulb-on";
|
||||||
title = "Alles An";
|
title = "Alles An";
|
||||||
};
|
};
|
||||||
|
@ -31,6 +31,21 @@ let
|
||||||
name = "flat";
|
name = "flat";
|
||||||
options = { inherit active vacation; };
|
options = { inherit active vacation; };
|
||||||
};
|
};
|
||||||
|
wohnzimmer = {
|
||||||
|
title = "Wohnzimmer";
|
||||||
|
name = "wohnzimmer";
|
||||||
|
options = { inherit empty heat active force_active; };
|
||||||
|
};
|
||||||
|
kueche = {
|
||||||
|
title = "Küche";
|
||||||
|
name = "kueche";
|
||||||
|
options = { inherit empty active; };
|
||||||
|
};
|
||||||
|
schlafzimmer = {
|
||||||
|
title = "Schlafzimmer";
|
||||||
|
name = "schlafzimmer";
|
||||||
|
options = { inherit empty heat active force_active; };
|
||||||
|
};
|
||||||
};
|
};
|
||||||
inherit (import ../../../nix/sources.nix) nixos-unstable;
|
inherit (import ../../../nix/sources.nix) nixos-unstable;
|
||||||
homeAssistantDir = "/disk/persist/home-assistant";
|
homeAssistantDir = "/disk/persist/home-assistant";
|
||||||
|
@ -42,6 +57,9 @@ in
|
||||||
];
|
];
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
(modules.mkModeSwitcher modes.wohnzimmer { })
|
||||||
|
(modules.mkModeSwitcher modes.kueche { })
|
||||||
|
(modules.mkModeSwitcher modes.schlafzimmer { })
|
||||||
(modules.mkModeSwitcher modes.flat { })
|
(modules.mkModeSwitcher modes.flat { })
|
||||||
"${nixos-unstable}/nixos/modules/services/misc/home-assistant.nix"
|
"${nixos-unstable}/nixos/modules/services/misc/home-assistant.nix"
|
||||||
./hexa-cards.nix
|
./hexa-cards.nix
|
||||||
|
@ -151,10 +169,10 @@ in
|
||||||
{
|
{
|
||||||
alias = "Thermostatsteuerung Küche";
|
alias = "Thermostatsteuerung Küche";
|
||||||
trigger = with triggers; [
|
trigger = with triggers; [
|
||||||
{ platform = "state"; entity_id = "input_number.target_temperature_kueche"; }
|
(stateTrigger "input_number.target_temperature_kueche")
|
||||||
{ platform = "state"; entity_id = "sensor.kueche_temperature"; }
|
(stateTrigger "sensor.kueche_temperature")
|
||||||
{ platform = "state"; entity_id = "binary_sensor.kuechenfenster"; }
|
(stateTrigger "binary_sensor.kuechenfenster")
|
||||||
{ platform = "state"; entity_id = "climate.kueche"; }
|
(stateTrigger "climate.kueche")
|
||||||
(modeSwitchTrigger modes.flat)
|
(modeSwitchTrigger modes.flat)
|
||||||
];
|
];
|
||||||
action = [{
|
action = [{
|
||||||
|
@ -179,9 +197,9 @@ in
|
||||||
{
|
{
|
||||||
alias = "Thermostatsteuerung Wohnzimmer";
|
alias = "Thermostatsteuerung Wohnzimmer";
|
||||||
trigger = with triggers; [
|
trigger = with triggers; [
|
||||||
{ platform = "state"; entity_id = "input_number.target_temperature_wohnzimmer"; }
|
(stateTrigger "input_number.target_temperature_wohnzimmer")
|
||||||
{ platform = "state"; entity_id = "binary_sensor.wohnzimmerfenster"; }
|
(stateTrigger "binary_sensor.wohnzimmerfenster")
|
||||||
{ platform = "state"; entity_id = "climate.wohnzimmer"; }
|
(stateTrigger "climate.wohnzimmer")
|
||||||
(modeSwitchTrigger modes.flat)
|
(modeSwitchTrigger modes.flat)
|
||||||
];
|
];
|
||||||
action = [{
|
action = [{
|
||||||
|
@ -202,92 +220,93 @@ in
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
alias = "Küchentemperatur";
|
alias = "Küchentemperatur";
|
||||||
trigger = [{ platform = "state"; entity_id = "input_select.scene_kueche"; }];
|
trigger = [ (triggers.modeSwitchTrigger modes.kueche) ];
|
||||||
action = [{
|
action = [{
|
||||||
service = "input_number.set_value";
|
service = "input_number.set_value";
|
||||||
target.entity_id = "input_number.target_temperature_kueche";
|
target.entity_id = "input_number.target_temperature_kueche";
|
||||||
data.value = ''
|
data.value = jinja.if' (jinja.isState (util.modeSelectEntity modes.kueche) "empty") "18" "20";
|
||||||
{% if is_state('input_select.scene_kueche', 'empty') %}
|
|
||||||
18
|
|
||||||
{% else %}
|
|
||||||
21
|
|
||||||
{% endif %}
|
|
||||||
'';
|
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
alias = "Wohnzimmertemperatur";
|
alias = "Wohnzimmertemperatur";
|
||||||
trigger = [{ platform = "state"; entity_id = "input_select.scene_wohnzimmer"; }];
|
trigger = [ (triggers.modeSwitchTrigger modes.wohnzimmer) ];
|
||||||
action = [{
|
action = [{
|
||||||
service = "input_number.set_value";
|
service = "input_number.set_value";
|
||||||
target.entity_id = "input_number.target_temperature_wohnzimmer";
|
target.entity_id = "input_number.target_temperature_wohnzimmer";
|
||||||
data.value = ''
|
data.value = jinja.if' (jinja.isState (util.modeSelectEntity modes.wohnzimmer) "empty") "18" "24";
|
||||||
{% if is_state('input_select.scene_wohnzimmer', 'empty') %}
|
|
||||||
18
|
|
||||||
{% else %}
|
|
||||||
24
|
|
||||||
{% endif %}
|
|
||||||
'';
|
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
alias = "Schlafzimmertemperatur";
|
alias = "Schlafzimmertemperatur";
|
||||||
trigger = [{ platform = "state"; entity_id = "input_select.scene_schlafzimmer"; }];
|
trigger = [ (triggers.modeSwitchTrigger modes.schlafzimmer) ];
|
||||||
action = [{
|
action = [{
|
||||||
service = "input_number.set_value";
|
service = "input_number.set_value";
|
||||||
target.entity_id = "input_number.target_temperature_schlafzimmer";
|
target.entity_id = "input_number.target_temperature_schlafzimmer";
|
||||||
data.value = ''
|
data.value = jinja.if' (jinja.isState (util.modeSelectEntity modes.schlafzimmer) "empty") "18" "20";
|
||||||
{% if is_state('input_select.scene_schlafzimmer', 'empty') %}
|
|
||||||
18
|
|
||||||
{% else %}
|
|
||||||
21
|
|
||||||
{% endif %}
|
|
||||||
'';
|
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
alias = "Wohnzimmerlichter";
|
alias = "Wohnzimmerlichter";
|
||||||
trigger = [{ platform = "state"; entity_id = "input_select.scene_wohnzimmer"; } { platform = "state"; entity_id = "sun.sun"; }];
|
trigger = with triggers; [
|
||||||
|
(modeSwitchTrigger modes.wohnzimmer)
|
||||||
|
(stateTrigger "sun.sun")
|
||||||
|
];
|
||||||
action = [{
|
action = [{
|
||||||
service = ''
|
service = jinja.if'
|
||||||
{% if is_state('input_select.scene_wohnzimmer', 'force-active') or (is_state('input_select.scene_wohnzimmer', 'active') and state_attr('sun.sun', 'elevation') < 6) %}
|
(jinja.or
|
||||||
homeassistant.turn_on
|
(jinja.isState (util.modeSelectEntity modes.wohnzimmer) "force_active")
|
||||||
{% else %}
|
(jinja.and
|
||||||
homeassistant.turn_off
|
(jinja.isState (util.modeSelectEntity modes.wohnzimmer) "active")
|
||||||
{% endif %}'';
|
"state_attr('sun.sun', 'elevation') < 6"))
|
||||||
|
"homeassistant.turn_on"
|
||||||
|
"homeassistant.turn_off";
|
||||||
target.entity_id = "group.wohnzimmer_lights";
|
target.entity_id = "group.wohnzimmer_lights";
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
alias = "Schlafzimmerlichter";
|
alias = "Schlafzimmerlichter";
|
||||||
trigger = [{ platform = "state"; entity_id = "input_select.scene_schlafzimmer"; } { platform = "state"; entity_id = "sun.sun"; }];
|
trigger = with triggers; [
|
||||||
|
(modeSwitchTrigger modes.schlafzimmer)
|
||||||
|
(stateTrigger "sun.sun")
|
||||||
|
];
|
||||||
action = [{
|
action = [{
|
||||||
service = ''
|
service = jinja.if'
|
||||||
{% if is_state('input_select.scene_schlafzimmer', 'force-active') or (is_state('input_select.scene_schlafzimmer', 'active') and state_attr('sun.sun', 'elevation') < 6) %}
|
(jinja.or
|
||||||
homeassistant.turn_on
|
(jinja.isState (util.modeSelectEntity modes.schlafzimmer) "force_active")
|
||||||
{% else %}
|
(jinja.and
|
||||||
homeassistant.turn_off
|
(jinja.isState (util.modeSelectEntity modes.schlafzimmer) "active")
|
||||||
{% endif %}'';
|
"state_attr('sun.sun', 'elevation') < 6"))
|
||||||
|
"homeassistant.turn_on"
|
||||||
|
"homeassistant.turn_off";
|
||||||
target.entity_id = "group.schlafzimmer_lights";
|
target.entity_id = "group.schlafzimmer_lights";
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
alias = "Schlafzimmer vorheizen";
|
alias = "Schlafzimmer vorheizen";
|
||||||
trigger = [{ platform = "time"; at = "19:00:00"; } { platform = "time"; at = "04:00:00"; }];
|
trigger = [{ platform = "time"; at = "19:00:00"; } { platform = "time"; at = "04:00:00"; }];
|
||||||
condition = [{ condition = "state"; entity_id = "input_select.scene_schlafzimmer"; state = "empty"; } (conditions.modeIs modes.flat "active")];
|
condition = [
|
||||||
action = [{ service = "input_select.select_option"; data.option = "heat"; entity_id = "input_select.scene_schlafzimmer"; }];
|
(conditions.modeIs modes.schlafzimmer "empty")
|
||||||
|
(conditions.modeIs modes.flat "active")
|
||||||
|
];
|
||||||
|
action = [ (actions.setMode modes.schlafzimmer "heat") ];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
alias = "Schlafzimmer nachts kühl";
|
alias = "Schlafzimmer nachts kühl";
|
||||||
trigger = [{ platform = "time"; at = "01:00:00"; }];
|
trigger = [{ platform = "time"; at = "01:00:00"; }];
|
||||||
condition = [{ condition = "state"; entity_id = "input_select.scene_schlafzimmer"; state = "heat"; } (conditions.modeIs modes.flat "active")];
|
condition = [
|
||||||
action = [{ service = "input_select.select_option"; data.option = "empty"; entity_id = "input_select.scene_schlafzimmer"; }];
|
(conditions.modeIs modes.schlafzimmer "heat")
|
||||||
|
(conditions.modeIs modes.flat "active")
|
||||||
|
];
|
||||||
|
action = [ (actions.setMode modes.schlafzimmer "empty") ];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
alias = "Morgens Licht an";
|
alias = "Morgens Licht an";
|
||||||
trigger = [{ platform = "time"; at = "08:00:00"; }];
|
trigger = [{ platform = "time"; at = "08:00:00"; }];
|
||||||
condition = [{ condition = "state"; entity_id = "input_select.scene_schlafzimmer"; state = "heat"; } (conditions.modeIs modes.flat "active")];
|
condition = [
|
||||||
action = [{ service = "input_select.select_option"; data.option = "active"; entity_id = "input_select.scene_schlafzimmer"; }];
|
(conditions.modeIs modes.schlafzimmer "heat")
|
||||||
|
(conditions.modeIs modes.flat "active")
|
||||||
|
];
|
||||||
|
action = [ (actions.setMode modes.schlafzimmer "active") ];
|
||||||
}
|
}
|
||||||
# Warnung für offene Fenster oder Türen
|
# Warnung für offene Fenster oder Türen
|
||||||
# Warnungen für niedrige Akkustände
|
# Warnungen für niedrige Akkustände
|
||||||
|
@ -312,18 +331,6 @@ in
|
||||||
{ sensor = [{ state = "{% if is_state('climate.wohnzimmer', 'heat') %}1{% else %}0{% endif %}"; name = "Wohnzimmerheizung"; }]; }
|
{ sensor = [{ state = "{% if is_state('climate.wohnzimmer', 'heat') %}1{% else %}0{% endif %}"; name = "Wohnzimmerheizung"; }]; }
|
||||||
{ sensor = [{ state = "{% if is_state('climate.kueche', 'heat') %}1{% else %}0{% endif %}"; name = "Küchenheizung"; }]; }
|
{ sensor = [{ state = "{% if is_state('climate.kueche', 'heat') %}1{% else %}0{% endif %}"; name = "Küchenheizung"; }]; }
|
||||||
{ sensor = [{ state = "{{ state_attr('climate.wohnzimmer', 'current_temperature') }}"; name = "Temperatur Wohnzimmer"; }]; }
|
{ sensor = [{ state = "{{ state_attr('climate.wohnzimmer', 'current_temperature') }}"; name = "Temperatur Wohnzimmer"; }]; }
|
||||||
{ binary_sensor = [{ state = "{% if is_state('input_select.scene_schlafzimmer', 'empty') %}1{% else %}0{% endif %}"; name = "schlafzimmer_empty"; }]; }
|
|
||||||
{ binary_sensor = [{ state = "{% if is_state('input_select.scene_schlafzimmer', 'heat') %}1{% else %}0{% endif %}"; name = "schlafzimmer_heat"; }]; }
|
|
||||||
{ binary_sensor = [{ state = "{% if is_state('input_select.scene_schlafzimmer', 'active') %}1{% else %}0{% endif %}"; name = "schlafzimmer_active"; }]; }
|
|
||||||
{ binary_sensor = [{ state = "{% if is_state('input_select.scene_schlafzimmer', 'force-active') %}1{% else %}0{% endif %}"; name = "schlafzimmer_force_active"; }]; }
|
|
||||||
{ binary_sensor = [{ state = "{% if is_state('input_select.scene_wohnzimmer', 'empty') %}1{% else %}0{% endif %}"; name = "wohnzimmer_empty"; }]; }
|
|
||||||
{ binary_sensor = [{ state = "{% if is_state('input_select.scene_wohnzimmer', 'heat') %}1{% else %}0{% endif %}"; name = "wohnzimmer_heat"; }]; }
|
|
||||||
{ binary_sensor = [{ state = "{% if is_state('input_select.scene_wohnzimmer', 'active') %}1{% else %}0{% endif %}"; name = "wohnzimmer_active"; }]; }
|
|
||||||
{ binary_sensor = [{ state = "{% if is_state('input_select.scene_wohnzimmer', 'force-active') %}1{% else %}0{% endif %}"; name = "wohnzimmer_force_active"; }]; }
|
|
||||||
{ binary_sensor = [{ state = "{% if is_state('input_select.scene_kueche', 'empty') %}1{% else %}0{% endif %}"; name = "kueche_empty"; }]; }
|
|
||||||
{ binary_sensor = [{ state = "{% if is_state('input_select.scene_kueche', 'heat') %}1{% else %}0{% endif %}"; name = "kueche_heat"; }]; }
|
|
||||||
{ binary_sensor = [{ state = "{% if is_state('input_select.scene_kueche', 'active') %}1{% else %}0{% endif %}"; name = "kueche_active"; }]; }
|
|
||||||
{ binary_sensor = [{ state = "{% if is_state('input_select.scene_kueche', 'force-active') %}1{% else %}0{% endif %}"; name = "kueche_force_active"; }]; }
|
|
||||||
];
|
];
|
||||||
input_number = {
|
input_number = {
|
||||||
target_temperature_schlafzimmer = {
|
target_temperature_schlafzimmer = {
|
||||||
|
@ -348,20 +355,6 @@ in
|
||||||
step = "0.25";
|
step = "0.25";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
input_select = {
|
|
||||||
scene_schlafzimmer = {
|
|
||||||
name = "Szene Schlafzimmer";
|
|
||||||
options = [ "empty" "heat" "active" "force-active" ];
|
|
||||||
};
|
|
||||||
scene_wohnzimmer = {
|
|
||||||
name = "Szene Wohnzimmer";
|
|
||||||
options = [ "empty" "heat" "active" "force-active" ];
|
|
||||||
};
|
|
||||||
scene_kueche = {
|
|
||||||
name = "Szene Kueche";
|
|
||||||
options = [ "empty" "heat" "active" "force-active" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
system_health = { };
|
system_health = { };
|
||||||
zha = {
|
zha = {
|
||||||
device_config = {
|
device_config = {
|
||||||
|
@ -410,11 +403,21 @@ in
|
||||||
state_filter = [ "on" ];
|
state_filter = [ "on" ];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
badges = [
|
badges =
|
||||||
{ type = "state-label"; entity = "input_select.scene_wohnzimmer"; name = "Wohnzimmer"; tap_action = { action = "call-service"; service = "input_select.select_next"; service_data.entity_id = "input_select.scene_wohnzimmer"; }; }
|
let
|
||||||
{ type = "state-label"; entity = "input_select.scene_kueche"; name = "Küche"; tap_action = { action = "call-service"; service = "input_select.select_next"; service_data.entity_id = "input_select.scene_kueche"; }; }
|
badge = mode:
|
||||||
{ type = "state-label"; entity = "input_select.scene_schlafzimmer"; name = "Schlafzimmer"; tap_action = { action = "call-service"; service = "input_select.select_next"; service_data.entity_id = "input_select.scene_schlafzimmer"; }; }
|
{
|
||||||
];
|
type = "state-label";
|
||||||
|
entity = util.modeSelectEntity mode;
|
||||||
|
name = mode.title;
|
||||||
|
tap_action = tap_actions.cycleMode mode;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
[
|
||||||
|
(badge modes.wohnzimmer)
|
||||||
|
(badge modes.kueche)
|
||||||
|
(badge modes.schlafzimmer)
|
||||||
|
];
|
||||||
envstack =
|
envstack =
|
||||||
{
|
{
|
||||||
type = "vertical-stack";
|
type = "vertical-stack";
|
||||||
|
@ -440,18 +443,7 @@ in
|
||||||
{
|
{
|
||||||
type = "vertical-stack";
|
type = "vertical-stack";
|
||||||
cards = [
|
cards = [
|
||||||
{
|
(cards.modeSwitcher modes.wohnzimmer)
|
||||||
type = "glance";
|
|
||||||
title = "Wohnzimmer";
|
|
||||||
columns = 4;
|
|
||||||
show_state = false;
|
|
||||||
entities = [
|
|
||||||
{ entity = "binary_sensor.wohnzimmer_empty"; name = "Leer"; icon = "mdi:account-off"; tap_action = { action = "call-service"; service = "input_select.select_option"; service_data = { entity_id = "input_select.scene_wohnzimmer"; option = "empty"; }; }; }
|
|
||||||
{ entity = "binary_sensor.wohnzimmer_heat"; name = "Heizen"; icon = "mdi:radiator"; tap_action = { action = "call-service"; service = "input_select.select_option"; service_data = { entity_id = "input_select.scene_wohnzimmer"; option = "heat"; }; }; }
|
|
||||||
{ entity = "binary_sensor.wohnzimmer_active"; name = "Aktiv"; icon = "mdi:account"; tap_action = { action = "call-service"; service = "input_select.select_option"; service_data = { entity_id = "input_select.scene_wohnzimmer"; option = "active"; }; }; }
|
|
||||||
{ entity = "binary_sensor.wohnzimmer_force_active"; name = "Alles An"; icon = "mdi:lightbulb-on"; tap_action = { action = "call-service"; service = "input_select.select_option"; service_data = { entity_id = "input_select.scene_wohnzimmer"; option = "force-active"; }; }; }
|
|
||||||
];
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
type = "custom:mini-graph-card";
|
type = "custom:mini-graph-card";
|
||||||
entities = [
|
entities = [
|
||||||
|
@ -478,25 +470,14 @@ in
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
type = "logbook";
|
type = "logbook";
|
||||||
entities = [ "input_select.scene_wohnzimmer" "binary_sensor.wohnzimmerfenster" "switch.lichterkette_fernseher" "switch.lichterkette_schrank" "switch.blaue_lichterkette" ];
|
entities = [ (util.modeSelectEntity modes.wohnzimmer) "binary_sensor.wohnzimmerfenster" "switch.lichterkette_fernseher" "switch.lichterkette_schrank" "switch.blaue_lichterkette" ];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
kuechenstack = {
|
kuechenstack = {
|
||||||
type = "vertical-stack";
|
type = "vertical-stack";
|
||||||
cards = [
|
cards = [
|
||||||
{
|
(cards.modeSwitcher modes.kueche)
|
||||||
type = "glance";
|
|
||||||
title = "Küche";
|
|
||||||
columns = 4;
|
|
||||||
show_state = false;
|
|
||||||
entities = [
|
|
||||||
{ entity = "binary_sensor.kueche_empty"; name = "Leer"; icon = "mdi:account-off"; tap_action = { action = "call-service"; service = "input_select.select_option"; service_data = { entity_id = "input_select.scene_kueche"; option = "empty"; }; }; }
|
|
||||||
{ entity = "binary_sensor.kueche_heat"; name = "Heizen"; icon = "mdi:radiator"; tap_action = { action = "call-service"; service = "input_select.select_option"; service_data = { entity_id = "input_select.scene_kueche"; option = "heat"; }; }; }
|
|
||||||
{ entity = "binary_sensor.kueche_active"; name = "Aktiv"; icon = "mdi:account"; tap_action = { action = "call-service"; service = "input_select.select_option"; service_data = { entity_id = "input_select.scene_kueche"; option = "active"; }; }; }
|
|
||||||
{ entity = "binary_sensor.kueche_force_active"; name = "Alles An"; icon = "mdi:lightbulb-on"; tap_action = { action = "call-service"; service = "input_select.select_option"; service_data = { entity_id = "input_select.scene_kueche"; option = "force-active"; }; }; }
|
|
||||||
];
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
type = "custom:mini-graph-card";
|
type = "custom:mini-graph-card";
|
||||||
entities = [
|
entities = [
|
||||||
|
@ -548,7 +529,7 @@ in
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
type = "logbook";
|
type = "logbook";
|
||||||
entities = [ "input_select.scene_kueche" "climate.kueche" "binary_sensor.kuechenfenster" ];
|
entities = [ (util.modeSelectEntity modes.kueche) "climate.kueche" "binary_sensor.kuechenfenster" ];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
@ -556,18 +537,7 @@ in
|
||||||
{
|
{
|
||||||
type = "vertical-stack";
|
type = "vertical-stack";
|
||||||
cards = [
|
cards = [
|
||||||
{
|
(cards.modeSwitcher modes.schlafzimmer)
|
||||||
type = "glance";
|
|
||||||
title = "Schlafzimmer";
|
|
||||||
columns = 4;
|
|
||||||
show_state = false;
|
|
||||||
entities = [
|
|
||||||
{ entity = "binary_sensor.schlafzimmer_empty"; name = "Leer"; icon = "mdi:account-off"; tap_action = { action = "call-service"; service = "input_select.select_option"; service_data = { entity_id = "input_select.scene_schlafzimmer"; option = "empty"; }; }; }
|
|
||||||
{ entity = "binary_sensor.schlafzimmer_heat"; name = "Heizen"; icon = "mdi:radiator"; tap_action = { action = "call-service"; service = "input_select.select_option"; service_data = { entity_id = "input_select.scene_schlafzimmer"; option = "heat"; }; }; }
|
|
||||||
{ entity = "binary_sensor.schlafzimmer_active"; name = "Aktiv"; icon = "mdi:account"; tap_action = { action = "call-service"; service = "input_select.select_option"; service_data = { entity_id = "input_select.scene_schlafzimmer"; option = "active"; }; }; }
|
|
||||||
{ entity = "binary_sensor.schlafzimmer_force_active"; name = "Alles An"; icon = "mdi:lightbulb-on"; tap_action = { action = "call-service"; service = "input_select.select_option"; service_data = { entity_id = "input_select.scene_schlafzimmer"; option = "force-active"; }; }; }
|
|
||||||
];
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
type = "custom:mini-graph-card";
|
type = "custom:mini-graph-card";
|
||||||
entities = [
|
entities = [
|
||||||
|
@ -620,7 +590,7 @@ in
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
type = "logbook";
|
type = "logbook";
|
||||||
entities = [ "input_select.scene_schlafzimmer" "switch.weihnachtsstern_schlafzimmer" "switch.luftentfeuchter" "climate.schlafzimmer" "binary_sensor.schlafzimmerfenster" ];
|
entities = [ (util.modeSelectEntity modes.schlafzimmer) "switch.weihnachtsstern_schlafzimmer" "switch.luftentfeuchter" "climate.schlafzimmer" "binary_sensor.schlafzimmerfenster" ];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
@ -723,6 +693,14 @@ in
|
||||||
{
|
{
|
||||||
views = [
|
views = [
|
||||||
{ icon = "mdi:city"; inherit badges; cards = [ envstack ]; }
|
{ icon = "mdi:city"; inherit badges; cards = [ envstack ]; }
|
||||||
|
{
|
||||||
|
icon = "mdi:switch"; inherit alertbadges; cards = [
|
||||||
|
(cards.modeSwitcher modes.wohnzimmer)
|
||||||
|
(cards.modeSwitcher modes.kueche)
|
||||||
|
(cards.modeSwitcher modes.schlafzimmer)
|
||||||
|
(cards.modeSwitcher modes.flat)
|
||||||
|
];
|
||||||
|
}
|
||||||
{ icon = "mdi:floor-plan"; inherit alertbadges; cards = [ wohnzimmerstack kuechenstack schlafzimmerstack badstack ]; }
|
{ icon = "mdi:floor-plan"; inherit alertbadges; cards = [ wohnzimmerstack kuechenstack schlafzimmerstack badstack ]; }
|
||||||
{ icon = "mdi:sofa"; inherit badges; cards = [ wohnzimmerstack ]; }
|
{ icon = "mdi:sofa"; inherit badges; cards = [ wohnzimmerstack ]; }
|
||||||
{ icon = "mdi:countertop"; inherit badges; cards = [ kuechenstack ]; }
|
{ icon = "mdi:countertop"; inherit badges; cards = [ kuechenstack ]; }
|
||||||
|
|
|
@ -6,11 +6,30 @@ let
|
||||||
in
|
in
|
||||||
rec {
|
rec {
|
||||||
jinja = import ./jinja.nix lib;
|
jinja = import ./jinja.nix lib;
|
||||||
tap_actions = {
|
tap_actions =
|
||||||
|
let
|
||||||
|
fromServiceAction = action:
|
||||||
|
{
|
||||||
|
action = "call-service";
|
||||||
|
inherit (action) service;
|
||||||
|
service_data = action.data or { } // {
|
||||||
|
inherit (action) entity_id;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
setMode = mode: option: fromServiceAction (actions.setMode mode option);
|
||||||
|
cycleMode = mode: fromServiceAction (actions.cycleMode mode);
|
||||||
|
};
|
||||||
|
actions = {
|
||||||
|
cycleMode = mode: {
|
||||||
|
service = "input_select.select_next";
|
||||||
|
entity_id = util.modeSelectEntity mode;
|
||||||
|
};
|
||||||
setMode = mode: option: {
|
setMode = mode: option: {
|
||||||
action = "call-service";
|
|
||||||
service = "input_select.select_option";
|
service = "input_select.select_option";
|
||||||
service_data = { entity_id = util.modeSelectEntity mode; inherit option; };
|
data = { inherit option; };
|
||||||
|
entity_id = util.modeSelectEntity mode;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
util = rec {
|
util = rec {
|
||||||
|
@ -37,7 +56,10 @@ rec {
|
||||||
options = builtins.attrNames mode.options;
|
options = builtins.attrNames mode.options;
|
||||||
in
|
in
|
||||||
mkHAConfig {
|
mkHAConfig {
|
||||||
input_select.${util.modeSelectName mode} = { inherit options; } // attrs;
|
input_select.${util.modeSelectName mode} = {
|
||||||
|
inherit options;
|
||||||
|
name = mode.title;
|
||||||
|
} // attrs;
|
||||||
template = builtins.map (templates.binarySensorForMode mode) options;
|
template = builtins.map (templates.binarySensorForMode mode) options;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue