118 lines
3.1 KiB
Nix
118 lines
3.1 KiB
Nix
{ pkgs, config, lib, ... }:
|
|
|
|
let
|
|
unstablePkgs = import <nixpkgs-unstable> {};
|
|
in {
|
|
|
|
services.homeAssistantConfig =
|
|
let
|
|
|
|
sonoffSwitches = {
|
|
"pal01" = { label = "Bett"; icon = "mdi:lightbulb-on"; };
|
|
"pal02" = { label = "Lampe"; icon = "mdi:lightbulb-on"; };
|
|
"pal03" = { label = "Couche"; icon = "mdi:lightbulb-on"; };
|
|
"pal06" = { label = "Küche"; icon = "mdi:lightbulb-on"; };
|
|
"pal05" = { label = "TV"; icon = "mdi:television"; };
|
|
|
|
"pal04" = { label = "Nummer 4"; icon = "mdi:power-plug-off"; };
|
|
"pal07" = { label = "Nummer 7"; icon = "mdi:power-plug-off"; };
|
|
"pal08" = { label = "Nummer 8"; icon = "mdi:power-plug-off"; };
|
|
};
|
|
|
|
toSwitch = name: "switch.${name}";
|
|
|
|
in {
|
|
|
|
homeassistant = {
|
|
customize = lib.mapAttrs' (
|
|
entity: value:
|
|
{
|
|
name = toSwitch entity;
|
|
value = {
|
|
friendly_name = value.label;
|
|
icon = value.icon;
|
|
};
|
|
}
|
|
) sonoffSwitches;
|
|
};
|
|
|
|
script.turn_all_off.sequence = [
|
|
{
|
|
alias = "turn off sonoff";
|
|
service = "switch.turn_off";
|
|
data.entity_id = "group.all_lights";
|
|
}
|
|
{
|
|
alias = "turn off sonoff";
|
|
service = "switch.turn_off";
|
|
data.entity_id = "group.tv";
|
|
}
|
|
];
|
|
|
|
script.turn_all_on.sequence = [
|
|
{
|
|
alias = "turn on all lights";
|
|
service = "switch.turn_on";
|
|
data.entity_id = "group.all_lights";
|
|
}
|
|
];
|
|
|
|
group = {
|
|
bed_room = {
|
|
entities = builtins.map toSwitch [ "pal01" ];
|
|
};
|
|
living_room = {
|
|
entities = builtins.map toSwitch [ "pal03" "pal02" ];
|
|
};
|
|
tv = {
|
|
entities = builtins.map toSwitch [ "pal05" ];
|
|
};
|
|
kitchen = {
|
|
entities = builtins.map toSwitch [ "pal06" ];
|
|
};
|
|
unknown = {
|
|
entities = builtins.map toSwitch [ "pal04" "pal07" "pal08" ];
|
|
};
|
|
all_lights = {
|
|
entities = builtins.map toSwitch [ "pal01" "pal02" "pal03" "pal06" ];
|
|
};
|
|
};
|
|
|
|
switch =
|
|
let
|
|
sonoffConfigurations = builtins.map (name:
|
|
{
|
|
name = name;
|
|
platform = "mqtt";
|
|
command_topic = "cmnd/${lib.toUpper name}/POWER";
|
|
state_topic = "stat/${lib.toUpper name}/POWER";
|
|
payload_on = "ON";
|
|
payload_off = "OFF";
|
|
state_on = "ON";
|
|
state_off = "OFF";
|
|
}) (builtins.attrNames sonoffSwitches) ;
|
|
in
|
|
sonoffConfigurations;
|
|
|
|
# discover state on init
|
|
automation = [
|
|
{
|
|
alias = "Sonoff initial Power state";
|
|
trigger = {
|
|
platform = "homeassistant";
|
|
event = "start";
|
|
};
|
|
action = builtins.map ( name:
|
|
{
|
|
service = "mqtt.publish";
|
|
data = {
|
|
topic = "cmnd/${lib.toUpper name}/power";
|
|
payload = "";
|
|
};
|
|
})
|
|
(builtins.attrNames sonoffSwitches);
|
|
}
|
|
];
|
|
};
|
|
|
|
}
|