81 lines
2 KiB
Nix
81 lines
2 KiB
Nix
{ config, pkgs, ... }:
|
|
let
|
|
|
|
name = "chaospott";
|
|
folderPath = config.services.home-assistant.configDir;
|
|
filePath = "${folderPath}/${name}.json";
|
|
|
|
in {
|
|
services.homeAssistantConfig = {
|
|
|
|
sensor = [
|
|
{
|
|
platform = "file";
|
|
name = "${name}_aerie";
|
|
file_path = filePath;
|
|
value_template = "{{ value_json.aerie }}";
|
|
}
|
|
{
|
|
platform = "file";
|
|
name = "${name}_cellar";
|
|
file_path = filePath;
|
|
value_template = "{{ value_json.cellar }}";
|
|
}
|
|
];
|
|
|
|
homeassistant = {
|
|
whitelist_external_dirs = [ folderPath ];
|
|
customize = {
|
|
"sensor.${name}_aerie" = {
|
|
icon = "mdi:store";
|
|
entity_picture = "https://chaospott.de/images/logo.png";
|
|
friendly_name = "ChaosPott Oben";
|
|
};
|
|
"sensor.${name}_cellar" = {
|
|
icon = "mdi:store";
|
|
entity_picture = "https://chaospott.de/images/logo.png";
|
|
friendly_name = "ChaosPott Unten";
|
|
};
|
|
};
|
|
};
|
|
|
|
group = {
|
|
"${name}" = {
|
|
name = "ChaosPott (Essen)";
|
|
control = "hidden";
|
|
entities = [ "sensor.${name}_aerie" "sensor.${name}_cellar" ];
|
|
};
|
|
view_overview.entities = [ "group.${name}" ];
|
|
};
|
|
|
|
};
|
|
|
|
systemd.services."${name}" = {
|
|
enable = true;
|
|
before = [ "home-assistant.service" ];
|
|
wantedBy = [ "home-assistant.service" ];
|
|
serviceConfig = {
|
|
User = "hass";
|
|
Type = "oneshot";
|
|
};
|
|
description = "set ${name} for homeassistant";
|
|
script = ''
|
|
${pkgs.curl}/bin/curl --location --silent https://status.chaospott.de/api \
|
|
| ${pkgs.jq}/bin/jq --compact-output \
|
|
'.sensors.door_locked |
|
|
[.[] | { "\(.location)" : (if .value then "closed" else "open" end) }] |
|
|
reduce .[] as $item ({}; . + $item) ' \
|
|
>> ${filePath}
|
|
'';
|
|
};
|
|
|
|
systemd.timers."${name}" = {
|
|
enable = true;
|
|
wantedBy = [ "multi-user.target" ];
|
|
timerConfig = {
|
|
OnCalendar = "hourly";
|
|
Persistent = "true";
|
|
};
|
|
};
|
|
|
|
}
|