nixos-config/modules/hosts/nixberry/homeassistant.nix

367 lines
12 KiB
Nix

{
flake.modules.nixos."hosts/nixberry" =
{ pkgs, ... }:
{
services.home-assistant = {
enable = true;
configWritable = true;
extraComponents = [
"default_config"
"analytics"
"shopping_list"
"fritzbox"
"met"
"esphome"
"rpi_power"
"tuya"
"sonos"
];
customComponents = with pkgs.home-assistant-custom-components; [
smartthinq-sensors
];
extraPackages =
python3Packages: with python3Packages; [
ical
];
customLovelaceModules = with pkgs.home-assistant-custom-lovelace-modules; [
mushroom
bubble-card
clock-weather-card
vacuum-card
];
config = {
homeassistant = {
latitude = 49.37;
longitude = 8.66;
name = "Zone for Time";
temperature_unit = "C";
unit_system = "metric";
external_url = "https://ha.christophhollizeck.dev";
internal_url = "http://192.168.178.2:8123";
};
default_config = "";
mobile_app = "";
recorder = "";
http = {
use_x_forwarded_for = true;
trusted_proxies = [
"100.86.250.97" # loptland tailscale
];
};
sensor = [
{
platform = "template";
sensors = {
holli_monitors_power_fixed = {
friendly_name = "Holli Monitors Power fixed";
unit_of_measurement = "W";
value_template = "{{ (states('sensor.holli_monitors_power') | float / 10) | round(1) }}";
device_class = "energy";
};
holli_pc_power_fixed = {
friendly_name = "Holli PC Power fixed";
unit_of_measurement = "W";
value_template = "{{ (states('sensor.holli_pc_power') | float / 10) | round(1) }}";
device_class = "energy";
};
holli_desk_power_combined = {
friendly_name = "Holli Desk Power Combined";
unit_of_measurement = "W";
value_template = "{{ states('sensor.holli_pc_power_fixed') | float + states('sensor.holli_monitors_power_fixed') | float }}";
device_class = "energy";
};
};
}
{
name = "Holli PC Total Energy";
platform = "integration";
source = "sensor.holli_pc_power_fixed";
unique_id = "holli_pc_total_energy";
unit_prefix = "k";
unit_time = "h";
method = "left";
}
{
name = "Holli Monitors Total Energy";
platform = "integration";
source = "sensor.holli_monitors_power_fixed";
unique_id = "holli_monitors_total_energy";
unit_prefix = "k";
unit_time = "h";
method = "left";
}
];
};
lovelaceConfigWritable = true;
lovelaceConfig = [
{
tile = "main-dashboard";
views = [
{
title = "Home";
sections = [
{
type = "grid";
cards = [
{
type = "map";
entities = [
{ entity = "person.christoph_hollizeck"; }
{ entity = "person.kuralay_aman"; }
{ entity = "zone.home_2"; }
];
theme_mode = "auto";
grid_options = {
columns = "full";
rows = 6;
};
}
{
type = "custom:clock-weather-card";
entity = "weather.forecast_home";
forecast_rows = 6;
date_pattern = "DDDD";
time_pattern = "HH:mm";
}
{
display_order = "duedate_asc";
type = "todo-list";
entity = "todo.shopping_list";
title = "Shopping List";
hide_completed = true;
}
];
}
];
badges = [
{
type = "entity";
show_name = true;
show_state = true;
show_icon = true;
entity = "person.christoph_hollizeck";
name = {
type = "entity";
};
show_entity_picture = true;
}
{
type = "entity";
show_name = true;
show_state = true;
show_icon = true;
entity = "person.kuralay_aman";
show_entity_picture = true;
}
];
header = {
layout = "center";
badges_position = "bottom";
badges_wrap = "scroll";
card = {
type = "markdown";
text_only = true;
content = "# Hello {{ user }}\n";
};
};
type = "sections";
max_columns = 1;
cards = [ ];
}
{
type = "sections";
max_columns = 2;
title = "living-room";
path = "living-room";
sections = [
{
type = "grid";
cards = [
{
type = "history-graph";
entities = [ { entity = "sensor.living_room_temperature"; } ];
title = "Temperature";
}
];
}
{
type = "grid";
cards = [
{
type = "history-graph";
entities = [ { entity = "sensor.living_room_humidity"; } ];
title = "Humidity";
}
];
}
{
type = "grid";
cards = [
{
type = "custom:mushroom-media-player-card";
entity = "media_player.bedroom";
media_controls = [
"previous"
"play_pause_stop"
"next"
"repeat"
"shuffle"
];
use_media_info = true;
show_volume_level = true;
fill_container = false;
grid_options = {
columns = "full";
rows = 2;
};
volume_controls = [
"volume_set"
"volume_mute"
];
collapsible_controls = true;
}
];
}
{
type = "grid";
cards = [
{
type = "history-graph";
entities = [
{
entity = "sensor.holli_monitors_power_fixed";
name = "Monitors + Misc";
}
{
entity = "sensor.holli_pc_power_fixed";
name = "PC";
}
{
entity = "sensor.holli_desk_power_combined";
name = "Combined";
}
];
hours_to_show = 0.25;
title = "Desk - Holli";
}
];
}
];
cards = [ ];
}
{
type = "sections";
max_columns = 3;
title = "kitchen";
path = "kitchen";
sections = [
{
type = "grid";
cards = [
{
type = "thermostat";
entity = "climate.kueche_radiator";
}
];
}
{
type = "grid";
cards = [
{
type = "custom:vacuum-card";
entity = "vacuum.sl60d";
}
];
}
{
type = "grid";
cards = [
{
type = "glance";
entities = [
{
entity = "switch.kettle_socket_1";
name = {
type = "device";
};
show_last_changed = true;
}
{ entity = "sensor.kettle_total_energy"; }
];
}
{
show_name = true;
show_icon = true;
show_state = true;
type = "glance";
entities = [
{
entity = "switch.shelf_socket_1";
show_last_changed = true;
name = {
type = "device";
};
}
{ entity = "sensor.shelf_total_energy"; }
];
state_color = true;
}
];
}
];
}
{
type = "sections";
max_columns = 3;
title = "bedroom";
path = "bedroom";
sections = [
{
type = "grid";
cards = [
{
type = "thermostat";
entity = "climate.bedroom_radiator";
}
];
}
{
type = "grid";
cards = [
{
type = "history-graph";
entities = [ { entity = "sensor.bedroom_temperature"; } ];
title = "Temperature";
}
];
}
{
type = "grid";
cards = [
{
type = "history-graph";
entities = [ { entity = "sensor.bedroom_humidity"; } ];
title = "Humidity";
}
];
}
];
}
];
}
];
openFirewall = true;
};
};
}