This commit is contained in:
mjallen18
2025-11-21 14:44:26 -06:00
parent af57fdfb9f
commit f91ce5ad84

View File

@@ -10,158 +10,113 @@ let
inherit (lib.${namespace}) mkOpt; inherit (lib.${namespace}) mkOpt;
cfg = config.${namespace}.services.home-assistant.automation; cfg = config.${namespace}.services.home-assistant.automation;
yamlFormat = pkgs.formats.yaml { }; automationToYaml = lscfg: ''
- id: '${toString lscfg.id}'
mkLightswitchAutomation = name: lscfg: { alias: ${lscfg.alias}
id = lscfg.id; description: '${lscfg.description}'
alias = lscfg.alias; triggers:
description = lscfg.description; - device_id: ${lscfg.mqttDeviceId}
domain: mqtt
triggers = [ id: on press
{ subtype: on-press
device_id = lscfg.mqttDeviceId; trigger: device
domain = "mqtt"; type: action
id = "on press"; - device_id: ${lscfg.mqttDeviceId}
subtype = "on-press"; domain: mqtt
trigger = "device"; id: off press
type = "action"; subtype: off-press
} trigger: device
{ type: action
device_id = lscfg.mqttDeviceId; - device_id: ${lscfg.mqttDeviceId}
domain = "mqtt"; domain: mqtt
id = "off press"; id: up press
subtype = "off-press"; subtype: up-press
trigger = "device"; trigger: device
type = "action"; type: action
} - device_id: ${lscfg.mqttDeviceId}
{ domain: mqtt
device_id = lscfg.mqttDeviceId; id: down press
domain = "mqtt"; subtype: down-press
id = "up press"; trigger: device
subtype = "up-press"; type: action
trigger = "device"; - device_id: ${lscfg.mqttDeviceId}
type = "action"; domain: mqtt
} id: on hold
{ subtype: on-hold
device_id = lscfg.mqttDeviceId; trigger: device
domain = "mqtt"; type: action
id = "down press"; conditions: []
subtype = "down-press"; actions:
trigger = "device"; - choose:
type = "action"; - conditions:
} - condition: trigger
{ id:
device_id = lscfg.mqttDeviceId; - on press
domain = "mqtt"; sequence:
id = "on hold"; - action: light.turn_on
subtype = "on-hold"; data:
trigger = "device"; brightness_pct: ${toString lscfg.brightnessPercent}
type = "action"; kelvin: ${toString lscfg.lightTemperature}
} transition: ${toString lscfg.transitionTime}
]; metadata: {}
target:
conditions = []; entity_id:
- ${lscfg.lightEntityId}
actions = [ - conditions:
{ - condition: trigger
choose = [ id:
{ - off press
conditions = [ sequence:
{ - action: light.turn_off
condition = "trigger"; data:
id = [ "on press" ]; transition: ${toString lscfg.transitionTime}
} metadata: {}
]; target:
sequence = [ entity_id:
{ - ${lscfg.lightEntityId}
action = "light.turn_on"; - conditions:
data = { - condition: trigger
brightness_pct = lscfg.brightnessPercent; id:
kelvin = lscfg.lightTemperature; - up press
transition = lscfg.transitionTime; sequence:
}; - action: light.turn_on
metadata = {}; data:
target.entity_id = [ lscfg.lightEntityId ]; brightness_step_pct: ${toString lscfg.brightnessStepPercent}
} metadata: {}
]; target:
} entity_id: ${lscfg.lightEntityId}
{ - conditions:
conditions = [ - condition: trigger
{ id:
condition = "trigger"; - down press
id = [ "off press" ]; sequence:
} - action: light.turn_on
]; data:
sequence = [ brightness_step_pct: ${toString (-lscfg.brightnessStepPercent)}
{ metadata: {}
action = "light.turn_off"; target:
data.transition = lscfg.transitionTime; entity_id: ${lscfg.lightEntityId}
metadata = {}; - conditions:
target.entity_id = [ lscfg.lightEntityId ]; - condition: trigger
} id:
]; - on hold
} sequence:
{ - action: light.turn_on
conditions = [ data:
{ brightness_pct: 100
condition = "trigger"; rgb_color:
id = [ "up press" ]; - 255
} - 0
]; - 0
sequence = [ transition: 0
{ metadata: {}
action = "light.turn_on"; target:
data.brightness_step_pct = lscfg.brightnessStepPercent; entity_id:
metadata = {}; - ${lscfg.lightEntityId}
target.entity_id = lscfg.lightEntityId; mode: single
} '';
];
} lightswitchAutomations = concatStringsSep "\n" (mapAttrsToList (_: automationToYaml) cfg.lightswitch);
{
conditions = [
{
condition = "trigger";
id = [ "down press" ];
}
];
sequence = [
{
action = "light.turn_on";
data.brightness_step_pct = -lscfg.brightnessStepPercent;
metadata = {};
target.entity_id = lscfg.lightEntityId;
}
];
}
{
conditions = [
{
condition = "trigger";
id = [ "on hold" ];
}
];
sequence = [
{
action = "light.turn_on";
data = {
brightness_pct = 100;
rgb_color = [ 255 0 0 ];
transition = 0;
};
metadata = {};
target.entity_id = [ lscfg.lightEntityId ];
}
];
}
];
}
];
mode = "single";
};
# Generate all automations as list
lightswitchAutomations = mapAttrsToList mkLightswitchAutomation cfg.lightswitch;
in in
{ {
options.${namespace}.services.home-assistant.automation = { options.${namespace}.services.home-assistant.automation = {